home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / funcref.txt < prev    next >
Text File  |  1999-03-06  |  415KB  |  7,102 lines

  1.        OOOOOO                            VV        VV
  2.       OO    OO   PPPPPPP   TTTTTTTT  II   VV      VV  EEEEEE   CCCCCC
  3.       OO    OO   PP    PP     TT     II    VV    VV   EE       CC
  4.       OO    OO   PPPPPPP      TT     II     VV   VV   EEEEEE   CC
  5.       OO    OO   PP           TT     II       VVV     EE       CC
  6.        OOOOOO    PP           TT     II        V      EEEEEE   CCCCCC
  7.  
  8.  
  9.                        OptiVec Version 1.5
  10.  
  11.             Part Two: Function Reference for VectorLib
  12.  
  13.  
  14.                      Dr. Martin Sander Software Development
  15.                      Sertürnerstr. 11
  16.                      D-37085 Göttingen
  17.                      Germany
  18.                      e-mail: MartinSander@Bigfoot.com
  19.                      http://www.optivec.com
  20.  
  21. ****************************************************************************
  22.  
  23. S e c o n d  P a r t :   File  FUNCREF.TXT 
  24.  
  25. !!     This is an ASCII text file!  It is best viewed with a simple        !!
  26. !!     DOS editor.                                                         !!
  27. !!     If you load this file into a word processor under Windows, you      !!
  28. !!     must use the filter "DOS text".                                     !!
  29. !!     Alternatively, you may use FCONVERT (shipped with Borland C++) to   !!
  30. !!     convert from ASCII (OEM) into the ANSI character set.               !!
  31. !!     Preferrably use the lettertype CourierNew 10 pt.                    !!
  32.  
  33. A general description of VectorLib is given in the  F i r s t  P a r t
  34. of this documentation, in the file HANDBOOK.TXT.
  35. Chapter 1.2 of that file contains the licence terms.
  36.  
  37. Copyright for the Software and its documentation (C) 1996-1999 Martin Sander
  38.  
  39.  
  40. ****************************************************************************
  41. *                                                                          *
  42. *******                8. Alphabetical Reference                     *******
  43. *                                                                          *
  44. ****************************************************************************
  45.  
  46.  
  47. The functions are alphabetically ordered, with the prefixes being neglected
  48. for the ordering. The heading of each entry lists all the versions available
  49. of a specific function. For example, the "abs" family of functions exists in
  50. vectorized versions for
  51. -  the three real-number data types float, double, and extended (long double)
  52.    with the prefixes VF_, VD_, and VE_,
  53. -  for the three complex-number data types (prefixes VCF_, VCD_, and VCE_),
  54. -  and for the signed integer data types int, byte, short int, long int,
  55.    and quad (prefixes VI_, VSI_, VLI_, and VQI_);
  56. unsigned numbers are, by their very definition, always positive, and it makes
  57. no sense to define the operation "abs" for them; consequently, the VU_, VUB_,
  58. VUS_, VUL_, and VUI_  versions are missing.
  59.  
  60. The lines following the heading describe the use of the respective functions
  61. in greater detail:
  62. Syntax          In most cases, only the VF_ version is described. All other
  63.                 versions are exactly analogous; one has only to replace the
  64.                 data types float and fVector by the appropriate ones and
  65.                 replace the  VF... include file by the one belonging to the
  66.                 desired data type.
  67. Description     Often, for the sake of simplicity, the brackets around vector
  68.                 element indices are left away.
  69.                 If not stated otherwise, all vector elements from the zero'th
  70.                 up to the last one (with the index  size-1) are subjected to
  71.                 the respective operation described.
  72.                 Thus, a formula like     Yi = │ Xi │   is to be understood
  73.                 as an abbreviation for   Y[i] = │ X[i] │,  i=0,...,size-1
  74.                 or, written as a loop:
  75.                     for( i=0; i<size; i++ ) Y[i] = fabs( X[i] );
  76. Error handling  All types of errors are listed which are detected and handled.
  77.                 The default result is given in each case. In case of any
  78.                 detected floating-point errors, _matherr or _matherrl are
  79.                 called (see chapter 5.3). Although we do not recommend that,
  80.                 the user may modify _matherr and _matherrl such as to specify
  81.                 other results than those suggested.
  82. Return value    The return value of the respective function is mentioned here.
  83. See also        References to functions without a prefix "V..." refer to
  84.                 the documentation your C/C++ compiler.
  85.  
  86. References to chapters 1. to 7. refer to the  F i r s t  P a r t  of this
  87. documentation. See the file HANDBOOK.TXT.
  88.  
  89.  
  90. ┌────────────────────────────────────────────────────────────────────────────┐
  91. │ VF_abs                   VD_abs                   VE_abs                   │
  92. │ VCF_abs                  VCD_abs                  VCE_abs                  │
  93. │ VI_abs         VBI_abs        VSI_abs        VLI_abs        VQI_abs        │
  94. └────────────────────────────────────────────────────────────────────────────┘
  95. Function        Absolute value
  96. Syntax          #include <VFmath.h>
  97.                 int  VF_abs(   fVector Y,  fVector X,  ui size );
  98.                        (similarly VD_, VE_, VBI_, VSI_, VI_, VLI_, VQI_)
  99.                 int  VCF_abs(  fVector Y,  cfVector X, ui size );
  100.                        (similarly VCD_, VCE_)
  101. Description     Real and integer versions:    Yi  =  │ Xi │
  102.                 VBI_, VSI_,  VI_, and VLI_ versions only: due to the implicit
  103.                    modulo-2**n arithmetics, the absolute value of the most
  104.                    negative numbers possible ( -32768 for short, -2147483648
  105.                    for long) is stored as the same negative (!) number
  106.                    (-32768 or -2147483648, resp.).
  107.                 Complex versions:      Yi  = sqrt( Xi.Re² + Xi.Im² )
  108.                 For the complex versions, note that the result is real-
  109.                    valued. The same result may also be obtained slightly
  110.                    faster, but without error handling, using VF_CtoAbs.
  111. Error handling  Real and integer versions: no errors should occur;
  112.                 Complex versions: OVERFLOW errors lead to the default result
  113.                 +HUGE_VAL.
  114. Return value    Floating-point versions: 0, if error-free, otherwise != 0.
  115.                 The integer versions have no return value.
  116. See also        VF_neg,  VCF_abs,  VCF_conj
  117.  
  118.  
  119. ┌────────────────────────────────────────────────────────────────────────────┐
  120. │ VF_absmax                VD_absmax                VE_absmax                │
  121. │ VCF_absmax               VCD_absmax               VCE_absmax               │
  122. └────────────────────────────────────────────────────────────────────────────┘
  123. Function        Largest absolute value within one vector
  124. Syntax          #include <VFstd.h>
  125.                 float VF_absmax( fVector X, ui size );
  126.                        (similarly VD_,  VE_)
  127.                 float VCF_absmax( cfVector X, ui size);
  128.                        (similarly VCD_, VCE_)
  129. Description     The absolute values of all elements of a vector are compared
  130.                 and the largest returned. For complex numbers, the magnitudes
  131.                 of the elements are compared and the largest returned. In
  132.                 order to find the greatest real and imaginary parts
  133.                 separately, please use VCF_absmaxReIm.
  134. Error handling  none
  135. Return value    maximum absolute value encountered.
  136. See also        VF_max, VF_absmin, VF_runmax, VF_absmaxind, VCF_absmaxReIm
  137.  
  138.  
  139. ┌────────────────────────────────────────────────────────────────────────────┐
  140. │ VF_absmaxind             VD_absmaxind             VE_absmaxind             │
  141. │ VCF_absmaxind            VCD_absmaxind            VCE_absmaxind            │
  142. └────────────────────────────────────────────────────────────────────────────┘
  143. Function        Largest absolute value and its index
  144. Syntax          #include <VFstd.h>
  145.                 float  VF_absmaxind( ui *Ind, fVector X, ui size );
  146.                        (similarly VD_,  VE_)
  147.                 float  VCF_absmaxind( ui *Ind, cfVector X, ui size );
  148.                        (similarly VCD_, VCE_)
  149. Description     The absolute values of all elements of a vector are compared
  150.                 and the largest returned. For complex numbers, the magnitudes
  151.                 of the elements are compared and the largest returned. The
  152.                 index of this maximum is stored at the address given by Ind.
  153.                 In case of more than one element with the same maximum value,
  154.                 the lowest index is chosen.
  155. Error handling  none
  156. Return value    maximum absolute value encountered.
  157. See also        VF_maxind, VF_absmax, VF_runmax, VF_maxind, VCF_absmaxReIm
  158.  
  159.  
  160. ┌────────────────────────────────────────────────────────────────────────────┐
  161. │ VCF_absmaxReIm           VCD_absmaxReIm           VCE_absmaxReIm           │
  162. └────────────────────────────────────────────────────────────────────────────┘
  163. Function        Separate determination of the largest absolute values of the
  164.                 real and imaginary parts occurring in a complex vector.
  165. Syntax          #include <VCFstd.h>
  166.                 fComplex  VCF_absmaxReIm( cfVector X, ui size );
  167.                        (similarly VCD_, VCE_)
  168. Description     The absolute values of the real parts of all vector elements
  169.                 are compared with each other and the largest one is returned
  170.                 as the real part of the result. Similarly, the absolute values
  171.                 of all the imaginary parts are compared with each other and
  172.                 the largest one is returned as the imaginary part of the
  173.                 result. Generally, the result is made up from different
  174.                 elements of the vector.
  175. Error handling  none
  176. Return value    Largest absolute real and imaginary parts, combined into one
  177.                 complex number.
  178. See also        VCF_maxReIm, VCF_absminReIm
  179.  
  180.  
  181. ┌────────────────────────────────────────────────────────────────────────────┐
  182. │ VF_absmin                VD_absmin                VE_absmin                │
  183. │ VCF_absmin               VCD_absmin               VCE_absmin               │
  184. └────────────────────────────────────────────────────────────────────────────┘
  185. Function        Smallest absolute value within one vector
  186. Syntax          #include <VFstd.h>
  187.                 float VF_absmin( fVector X, ui size );
  188.                       (similarly VD_,  VE_)
  189.                 float VCF_absmin( cfVector X, ui size );
  190.                       (similarly( VCD_, VCE_)
  191. Description     The absolute values of all elements of a vector are compared
  192.                 and the smallest returned. For complex numbers, the magnitudes
  193.                 of the elements are compared and the smallest returned. In
  194.                 order to find the smallest real and imaginary parts
  195.                 separately, please use VCF_absminReIm.
  196. Error handling  none
  197. Return value    minimum absolute value encountered.
  198. See also        VF_min, VF_absmax, VF_runmin, VF_minind, VCF_absminReIm
  199.  
  200.  
  201. ┌────────────────────────────────────────────────────────────────────────────┐
  202. │ VF_absminind             VD_absminind             VE_absminind             │
  203. │ VCF_absminind            VCD_absminind            VCE_absminind            │
  204. └────────────────────────────────────────────────────────────────────────────┘
  205. Function        Smallest absolute value and the index of its first
  206.                 occurrence.
  207. Syntax          #include <VFstd.h>
  208.                 float  VF_absminind(  ui *Ind, fVector X, ui size );
  209.                       (similarly VD_,  VE_)
  210.                 float  VCF_absminind( ui *Ind, cfVector X, ui size );
  211.                       (similarly VCD_, VCE_)
  212. Description     The absolute values of all elements of a vector are compared
  213.                 and the smallest returned. For complex numbers, the magnitudes
  214.                 of the elements are compared and the smallest returned. The
  215.                 index of this minimum is stored at the address given by Ind.
  216.                 In case of more than one element with the same minimum value,
  217.                 the lowest index is chosen.
  218. Error handling  none
  219. Return value    minimum absolute value encountered.
  220. See also        VF_minind, VF_absmin, VF_runmin, VF_maxind, VCF_absminReIm
  221.  
  222.  
  223. ┌────────────────────────────────────────────────────────────────────────────┐
  224. │ VCF_absminReIm           VCD_absminReIm           VCE_absminReIm           │
  225. └────────────────────────────────────────────────────────────────────────────┘
  226. Function        Separate determination of the smallest absolute values of the
  227.                 real and imaginary parts occurring in a complex vector.
  228. Syntax          #include <VCFstd.h>
  229.                 fComplex  VCF_absminReIm( cfVector X, ui size );
  230.                       (similarly( VCD_, VCE_)
  231. Description     The absolute values of the real parts of all vector elements
  232.                 are compared with each other and the smallest one is returned
  233.                 as the real part of the result. Similarly, the absolute values
  234.                 of all the imaginary parts are compared with each other and
  235.                 the smallest one is returned as the imaginary part of the
  236.                 result. Generally, the result is made up from different
  237.                 elements of the vector.
  238. Error handling  none
  239. Return value    Smallest absolute real and imaginary parts, combined into one
  240.                 complex number.
  241. See also        VCF_minReIm, VCF_absmaxReIm
  242.  
  243.  
  244. ┌────────────────────────────────────────────────────────────────────────────┐
  245. │ VF_accV                  VD_accV                  VE_accV                  │
  246. │ VCF_accV                 VCD_accV                 VCE_accV                 │
  247. │ VI_accV        VBI_accV       VSI_accV       VLI_accV       VQI_accV       │
  248. │ VU_accV        VUB_accV       VUS_accV       VUL_accV       VUI_accV       │
  249. │                    mixed-type versions:                                    │
  250. │ VD_accVF                 VE_accVF                 VE_accVD                 │
  251. │ VCD_accVCF               VCE_accVCF               VCE_accVCD               │
  252. │ VSI_accVBI                                                                 │
  253. │ VI_accVBI      VI_accVSI                                                   │
  254. │ VLI_accVBI     VLI_accVSI     VLI_accVI                                    │
  255. │ VUS_accVUB                                                                 │
  256. │ VU_accVUB      VU_accVUS                                                   │
  257. │ VUL_accVUB     VUL_accVUS     VUL_accVU                                    │
  258. │ VUI_accVUB     VUI_accVUS     VUI_accVU      VUI_accVUL                    │
  259. │ VQI_accVBI     VQI_accVSI     VQI_accVI      VQI_accVLI                    │
  260. │ VQI_accVUB     VQI_accVUS     VQI_accVU      VQI_accVUL     VQI_accVUI     │
  261. │                 VF_...    VD_...    VE_...                                 │
  262. │   ...accVI    ...accVBI    ...accVSI    ...accVLI     ...accVQI            │
  263. │   ...accVU    ...accVUB    ...accVUS    ...accVUL     ...accVUI            │
  264. └────────────────────────────────────────────────────────────────────────────┘
  265. Function        Accumulation (corresponds to the += operator)
  266. Syntax          #include <VFmath.h>
  267.                 void  VF_accV( fVector Y, fVector X, ui size );
  268.                 void  VD_accVF( dVector Y, fVector X, ui size );
  269. Description     Yi += Xi
  270.                 This family of functions consists of two groups. The
  271.                 first group is made up of the normal, same-type versions,
  272.                 like VF_accV.
  273.                 The much larger second group allows to add a lower-
  274.                 accuracy type vector to a higher-accuracy type vector,
  275.                 like VD_accVF. For the integer types, only the highest one,
  276.                 quad, is used to accumulate both signed and unsigned types.
  277.                 The 16-bit and 32-bit integer types can accumulate only
  278.                 the lower types of the same sort, signed or unsigned.
  279.                 All integer types can be accumulated in any of the three
  280.                 floating-point types.
  281. Error handling  none
  282. Return value    none
  283. See also        VF_addV
  284.  
  285.  
  286. ┌────────────────────────────────────────────────────────────────────────────┐
  287. │ VF_acos                  VD_acos                  VE_acos                  │
  288. │ VCF_acos                 VCD_acos                 VCE_acos                 │
  289. │ VFx_acos                 VDx_acos                 VEx_acos                 │
  290. │ VCFx_acos                VCDx_acos                VCEx_acos                │
  291. └────────────────────────────────────────────────────────────────────────────┘
  292. Function        arcus cosinus function
  293. Syntax          #include <VFmath.h>
  294.                 int  VF_acos(   fVector Y,  fVector X, ui size );
  295.                 int  VFx_acos(  fVector Y,  fVector  X, ui size,
  296.                                 float A, float B, float C );
  297. Description     normal versions:   Yi  =  arccos ( Xi )
  298.                 expanded versions: Yi  =  C *  arccos (A*Xi + B )
  299. Error handling  Real versions: DOMAIN errors occur for arguments outside the
  300.                 range    -1 <= Xi <= +1;  the default result is NAN ("not-a-
  301.                 number").
  302.                 The complex versions should be error-proof as long as the
  303.                 parameter C in the expanded versions is not already near the
  304.                 OVERFLOW limit; this very rare error is neither detected nor
  305.                 handled.
  306. Return value    0, if no error occurred, otherwise non-zero.
  307. See also        VF_cos,  VF_asin,  VF_atan,  acos
  308.  
  309.  
  310. ┌────────────────────────────────────────────────────────────────────────────┐
  311. │ VF_addC                  VD_addC                  VE_addC                  │
  312. │ VCF_addC                 VCD_addC                 VCE_addC                 │
  313. │ VCF_addReC               VCD_addReC               VCE_addReC               │
  314. │ VI_addC        VBI_addC       VSI_addC       VLI_addC       VQI_addC       │
  315. │ VU_addC        VUB_addC       VUS_addC       VUL_addC       VUI_addC       │
  316. └────────────────────────────────────────────────────────────────────────────┘
  317. Function        Add a constant to a vector
  318. Syntax          #include <VFmath.h>
  319.                 void VF_addC( fVector Y, fVector X, ui size, float C);
  320.                       (similarly VD_, VI_, etc.)
  321.                 void  VCF_addC( cfVector Y, cfVector X, ui size,
  322.                                 fComplex C );
  323.                 void  VCF_addReC( cfVector Y, cfVector X, ui size,
  324.                                   float CRe );
  325.                       (similarly VCD_, VCE_)
  326. Description     Yi  =  Xi  +  C
  327.                 The complex floating-point versions exist in two variants, one
  328.                 for complex constants C, the other for real-valued constants
  329.                 CRe added to the complex vector.
  330. Error handling  floating-point versions: none;
  331.                 integer versions: see chapter 5.2.
  332. Return value    none
  333. See also        VF_addV,  VF_subC,  VF_mulC,  VF_divC,  VF_visC,  VF_redC
  334.  
  335.  
  336. ┌────────────────────────────────────────────────────────────────────────────┐
  337. │ VF_addV                  VD_addV                  VE_addV                  │
  338. │ VCF_addV                 VCD_addV                 VCE_addV                 │
  339. │ VCF_addReV               VCD_addReV               VCE_addReV               │
  340. │ VFs_addV                 VDs_addV                 VEs_addV                 │
  341. │ VFx_addV                 VDx_addV                 VEx_addV                 │
  342. │ VCFx_addV                VCDx_addV                VCEx_addV                │
  343. │ VCFx_addReV              VCDx_addReV              VCEx_addReV              │
  344. │ VI_addV        VBI_addV       VSI_addV       VLI_addV       VQI_addV       │
  345. │ VU_addV        VUB_addV       VUS_addV       VUL_addV       VUI_addV       │
  346. └────────────────────────────────────────────────────────────────────────────┘
  347. Function        Add two vectors
  348. Syntax          #include <VFmath.h>
  349.                 void  VF_addV( fVector Z, fVector X, fVector Y,    ui size );
  350.                 void  VFs_addV( fVector Z, fVector X, fVector Y, ui size,
  351.                                 float C );
  352.                 void  VFx_addV( fVector Z, fVector X, fVector Y,
  353.                                 ui size, float A, float B );
  354.                       (similarly VD_,  VDx_,  VE_, VEx_,  VI_, etc.)
  355.                 void  VCF_addV( cfVector Z, cfVector X, cfVector Y,
  356.                                 ui size );
  357.                 void  VCF_addReV( cfVector Z, cfVector X, fVector Y,
  358.                                   ui size );
  359.                 void  VCFx_addV( cfVector Z, cfVector X, cfVector Y,
  360.                                  ui size, fComplex A, fComplex B );
  361.                 void  VCFx_addReV( cfVector Z, cfVector X, fVector Y,
  362.                                    ui size, fComplex A, fComplex B );
  363.                       (similarly VCD_,  VCDx_,  VCE_,  VCEx_)
  364. Description     normal versions:    Zi  =  Xi + Yi
  365.                 scaled versions:    Zi  =  C * (Xi + Yi)
  366.                 expanded versions:  Zi  =  (A * Xi + B)  +  Yi
  367.                 The complex floating-point versions exist in two variants. In
  368.                 the first variant (e.g.VCF_addV,  VCFx_addV), X, Y, and Z are
  369.                 all complex; in the second variant, Y is real-valued (e.g.,
  370.                 VCF_addReV - "add a real vector").
  371. Error handling  floating-point versions: none;
  372.                 integer versions: see chapter 5.2.
  373. Return value    none
  374. See also        VF_addC,  VF_subV,  VF_mulV,  VF_divV,  VF_visV,  VF_redV
  375.  
  376.  
  377. ┌────────────────────────────────────────────────────────────────────────────┐
  378. │ VI_and              VSI_and             VLI_and             VQI_and        │
  379. │ VU_and              VUS_and             VUL_and             VUI_and        │
  380. └────────────────────────────────────────────────────────────────────────────┘
  381. Function        Bit-wise AND operation.
  382. Syntax          #include <VImath.h>
  383.                 void VI_and( iVector Y, iVector X, ui size, int C );
  384.                       (similarly all other functions of this family)
  385. Description     Yi  =  (Xi) & C
  386.                 The bit-wise AND operation is performed on each element Xi
  387.                 with the bit-mask given by C.  A bit is 1 in Yi, if it was 1
  388.                 both in Xi and in C, and 0 otherwise. Perhaps the most useful
  389.                 application of this family of functions is the fast "modulo"
  390.                 operation on unsigned or positive numbers with the modulus
  391.                 being an integer power of 2. For example, a modulo division by
  392.                 64 is performed by
  393.                       VU_and( Y, X, size, 64-1 );
  394. Error handling  none
  395. Return value    none
  396. See also        VI_not,  VI_or,  VI_xor
  397.  
  398.  
  399. ┌────────────────────────────────────────────────────────────────────────────┐
  400. │ VCF_arg                  VCD_arg                  VCE_arg                  │
  401. └────────────────────────────────────────────────────────────────────────────┘
  402. Function        Argument (angle in polar coordinates). Implemented as a macro
  403.                 that calls VF_CtoArg, VD_CtoArg, VE_CtoArg, resp.  See these
  404.                 functions  for details.
  405.  
  406.  
  407. ┌────────────────────────────────────────────────────────────────────────────┐
  408. │ VF_asin                  VD_asin                  VE_asin                  │
  409. │ VCF_asin                 VCD_asin                 VCE_asin                 │
  410. │ VFx_asin                 VDx_asin                 VEx_asin                 │
  411. │ VCFx_asin                VCDx_asin                VCEx_asin                │
  412. └────────────────────────────────────────────────────────────────────────────┘
  413. Function        arcus sinus function
  414. Syntax          #include <VFmath.h>
  415.                 int  VF_asin( fVector Y, fVector X, ui size );
  416.                 int  VFx_asin( fVector  Y, fVector  X, ui size,
  417.                                float A, float B, float C );
  418. Description     normal versions:    Yi  =  arcsin ( Xi )
  419.                 expanded versions:  Yi  =  C *  arcsin (A*Xi + B )
  420. Error handling  Real versions: DOMAIN errors occur for arguments outside the
  421.                 range    -1 <= Xi <= +1;  the default result is NAN ("not-a-
  422.                 number").
  423.                 The complex versions should be error-proof as long as the
  424.                 parameter C in the expanded versions is not already near the
  425.                 OVERFLOW limit; this very rare error is either detected nor
  426.                 handled.
  427. Return value    0, if no error occurred, otherwise non-zero.
  428. See also        VF_sin,  VF_acos,  VF_atan,  asin
  429.  
  430.  
  431. ┌────────────────────────────────────────────────────────────────────────────┐
  432. │ VF_atan                  VD_atan                  VE_atan                  │
  433. │ VCF_atan                 VCD_atan                 VCE_atan                 │
  434. │ VFx_atan                 VDx_atan                 VEx_atan                 │
  435. │ VCFx_atan                VCDx_atan                VCEx_atan                │
  436. └────────────────────────────────────────────────────────────────────────────┘
  437. Function        arcus tangens function
  438. Syntax          #include <VFmath.h>
  439.                 int  VF_atan(  fVector Y, fVector X, ui size );
  440.                 int  VFx_atan( fVector Y, fVector X, ui size,
  441.                                float A, float B, float C );
  442. Description     normal versions:    Yi  =  arctan ( Xi )
  443.                 expanded versions:  Yi  =  C *  arctan (A*Xi + B )
  444. Error handling  The real versions should be error-proof as long as the
  445.                 parameter C in the expanded versions is not already near the
  446.                 OVERFLOW limit; this very rare error is neither detected nor
  447.                 handled.
  448.                 In the complex versions, the result for an argument of {0, -1}
  449.                 is set to   {0, -Pi} without notice (and without the program
  450.                 crash resulting in Borland C++ from calling the complex atan
  451.                 with this argument).
  452. Return value    always 0.
  453. See also        VF_tan,  VF_asin,  VF_acos,  VF_atan2,  atan,  atan2
  454.  
  455.  
  456. ┌────────────────────────────────────────────────────────────────────────────┐
  457. │ VF_atan2                 VD_atan2                 VE_atan2                 │
  458. │ VFx_atan2                VDx_atan2                VEx_atan2                │
  459. └────────────────────────────────────────────────────────────────────────────┘
  460. Function        arcus tangens function of quotients
  461. Syntax          #include <VFmath.h>
  462.                 int VF_atan2( fVector Z, fVector X, fVector Y, ui size );
  463.                 int  VFx_atan2( fVector Z,  fVector X,  fVector Y, ui size,
  464.                                 float A, float B, float C );
  465. Description     normal versions:    Zi  =  arctan(  Yi / Xi )
  466.                 expanded versions:  Zi  =  C *  arctan(  Yi / (A*Xi+B) )
  467.                 From Cartesian X - Y- coordinates, the angle of the
  468.                 corresponding polar coordinates is calculated. Be careful: in
  469.                 comparison to the ANSI C function atan2, the ordering of the
  470.                 parameters X and Y is reversed.
  471. Error handling  If Xi  and Yi are both zero, a DOMAIN error results with the
  472.                 default result NAN ("not-a-number"); this error is handled by
  473.                 _matherr and _matherrl  with Xi  and Yi as e->x and e->y.
  474. Return value    0, if no error occurred, otherwise non-zero.
  475. See also        VF_tan,  VF_asin,  VF_acos,  VF_atan,  atan,  atan2
  476.  
  477.  
  478. ┌────────────────────────────────────────────────────────────────────────────┐
  479. │ VF_autocorr              VD_autocorr              VE_autocorr              │
  480. └────────────────────────────────────────────────────────────────────────────┘
  481. Function        autocorrelation function
  482. Syntax          #include <VFstd.h>
  483.                 void VF_autocorr(  fVector Y, fVector X, ui size );
  484. Description     The autocorrelation function (ACF) of X is calculated and
  485.                 stored in Y  in wrap-around order: Y[0] to Y[size/2-1]
  486.                 contain the ACF for zero and positive lags. Beginning with
  487.                 the most negative lag in Y[size/2+1], the elements up to
  488.                 Y[size-1] contain the ACF for negative lags. Since this
  489.                 function assumes X to be periodic, the ACF for the most
  490.                 positive lag is identical to the ACF for the most negative
  491.                 lag. This element is stored as Y[size/2].
  492.                 To get the ACF into normal order, you may call
  493.                    VF_rotate( Y, Y, size, size/2 );
  494.                 After that, the zero point is at the position size/2.
  495.  
  496.                 In case X is non-periodic, you should avoid end effects
  497.                 by the methods described in connection with VF_convolve.
  498.  
  499.                 About special versions with the prefixes  VFs_  and VFl_,
  500.                 consult chapter 4.8.
  501. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_autocorr
  502.                 is based) complains "Size must be an integer power of 2"
  503.                 and the program is aborted.
  504. Return value    none
  505. See also        VF_FFT,  VF_convolve,  VF_xcorr, VF_spectrum
  506.  
  507.  
  508. ┌────────────────────────────────────────────────────────────────────────────┐
  509. │ VCF_autoPlot             VCD_autoPlot             VCE_autoPlot             │
  510. └────────────────────────────────────────────────────────────────────────────┘
  511. Function        Automatic plot of a complex vector into a Cartesian complex
  512.                 plane.
  513. Syntax          #include <Vgraph.h>
  514.                 void VCF_autoPlot( cfVector X, ui size,
  515.                                    unsigned form, COLORREF color );
  516. Description     A Cartesian complex plane is drawn with the axes automatically
  517.                 scaled and the vector X plotted into it. For a description of
  518.                 the parameters form and color, see VF_xyAutoPlot. The plotting
  519.                 routines have to be initialized by V_initGraph or V_initPlot
  520.                 prior to calling VCF_autoPlot.
  521. Error handling  none
  522. Return value    none
  523. See also        VCF_2AutoPlot,  VCF_dataPlot, VF_xyAutoPlot,  chapter 4.11
  524.  
  525.  
  526. ┌────────────────────────────────────────────────────────────────────────────┐
  527. │ VCF_2AutoPlot            VCD_2AutoPlot            VCE_2AutoPlot            │
  528. └────────────────────────────────────────────────────────────────────────────┘
  529. Function        Automatic plot of two complex vectors into a Cartesian
  530.                 complex plane.
  531. Syntax          #include <Vgraph.h>
  532.                 void VCF_2AutoPlot(  cfVector X1, ui size1,
  533.                                      unsigned form1, COLORREF color1,
  534.                                      cfVector X2, ui size2,
  535.                                      unsigned form2, COLORREF color2 );
  536. Description     A Cartesian complex plane is drawn with the axes automatically
  537.                 scaled and the vectors X1 and X2 plotted into it. For a
  538.                 description of the parameters form1, form2, color1, and
  539.                 color2, see VF_xyAutoPlot. The plotting routines have to be
  540.                 initialized by V_initGraph or V_initPlot prior to calling
  541.                 VCF_2AutoPlot.
  542. Error handling  none
  543. Return value    none
  544. See also        VCF_autoPlot,  VCF_dataPlot, VF_xyAutoPlot,  chapter 4.11
  545.  
  546.  
  547. ┌────────────────────────────────────────────────────────────────────────────┐
  548. │ VF_avdevC                VD_avdevC                VE_avdevC                │
  549. └────────────────────────────────────────────────────────────────────────────┘
  550. Function        average deviation from a preset value
  551. Syntax          #include <VFstd.h>
  552.                 float  VF_avdevC( fVector X, ui size, float C );
  553. Description     avdevC  =  1/size * sum(  │Xi - C│ )
  554.                 The average of the absolute deviation of each element of X
  555.                 from C is calculated and returned.
  556. Error handling  none
  557. Return value    average deviation.
  558. See also        VF_ssq, VF_ssqdevC, VF_avdevV, VF_sumdevC, VF_chiabs
  559.  
  560.  
  561. ┌────────────────────────────────────────────────────────────────────────────┐
  562. │ VF_avdevV                VD_avdevV                VE_avdevV                │
  563. └────────────────────────────────────────────────────────────────────────────┘
  564. Function        average deviation of the elements of one vector from the
  565.                 corresponding elements of another vector.
  566. Syntax          #include <VFstd.h>
  567.                 float  VF_avdevV( fVector X, fVector Y, ui size );
  568. Description     avdevV  =  1/size * sum(  │Xi - Yi│ )
  569.                 The average of the absolute deviation of each element of X
  570.                 from the corresponding element of Y is calculated.
  571. Error handling  none
  572. Return value    average deviation.
  573. See also        VF_ssq, VF_ssqdevV, VF_avdevC, VF_sumdevV, VF_chiabs
  574.  
  575.  
  576. ┌────────────────────────────────────────────────────────────────────────────┐
  577. │ V_CDtoCF                 V_CDtoCE                                          │
  578. │ V_CEtoCF                 V_CEtoCD                                          │
  579. │ V_CFtoCD                 V_CFtoCE                                          │
  580. └────────────────────────────────────────────────────────────────────────────┘
  581. Function        Data type conversions.  See V_FtoD.
  582.  
  583.  
  584. ┌────────────────────────────────────────────────────────────────────────────┐
  585. │ VF_ceil                  VD_ceil                  VE_ceil                  │
  586. │ VF_ceiltoI               VD_ceiltoI               VE_ceiltoI               │
  587. │ VF_ceiltoSI              VD_ceiltoSI              VE_ceiltoSI              │
  588. │ VF_ceiltoLI              VD_ceiltoLI              VE_ceiltoLI              │
  589. │ VF_ceiltoQI              VD_ceiltoQI              VE_ceiltoQI              │
  590. │ VF_ceiltoU               VD_ceiltoU               VE_ceiltoU               │
  591. │ VF_ceiltoUS              VD_ceiltoUS              VE_ceiltoUS              │
  592. │ VF_ceiltoUL              VD_ceiltoUL              VE_ceiltoUL              │
  593. │ VF_ceiltoUI              VD_ceiltoUI              VE_ceiltoUI              │
  594. └────────────────────────────────────────────────────────────────────────────┘
  595. Function        Rounding to the next whole number that is greater or equal.
  596. Syntax          #include <VFmath.h>
  597.                 int VF_ceil(    fVector Y,  fVector X,  ui size );
  598.                 int VF_ceiltoI( iVector Y,  fVector X,  ui size );
  599.                 int VF_ceiltoLI( liVector Y, fVector X, ui size );
  600.                      (similarly  all other functions of this family)
  601. Description     Each element of X is rounded to the nearest whole number that
  602.                 is greater than or equal to the input number and the result
  603.                 stored in Y. The functions VF_ceiltoI, VF_ceiltoLI,
  604.                 VF_ceiltoU etc. convert the result into the various integer
  605.                 data types (in the cases mentioned, to int,  long int, and
  606.                 unsigned, resp.).
  607. Error handling  OVERFLOW errors are handled by setting the result to the
  608.                 extreme value possible. Negative numbers in the versions
  609.                 VF_ceiltoU, VF_ceiltoUS, VF_ceiltoUL, and VF_ceiltoUI  lead
  610.                 to DOMAIN errors; they are handled by setting the result to 0.
  611. Return value    0, if no error occurred, otherwise non-zero.
  612. See also        ceil, floor, VF_round,  VF_floor, VF_chop, VF_trunc
  613.  
  614.  
  615. ┌────────────────────────────────────────────────────────────────────────────┐
  616. │ VF_chiabs                VD_chiabs                VE_chiabs                │
  617. └────────────────────────────────────────────────────────────────────────────┘
  618. Function        Absolute-value analogue of the chi-square merit function.
  619. Syntax          #include <VFstd.h>
  620.                 float  VF_chiabs( fVector X,  fVector Y,
  621.                                   fVector Wt, ui size );
  622. Description     chiabs  =  sum( weighti * |Xi - Yi| ).
  623.                 The chiabs function is a "robust" replacement for the
  624.                 chi-square merit function. It is used to judge the quality
  625.                 of a fit in the presence of outlier points. The chiabs
  626.                 function is disturbed by outlier points to a lesser degree
  627.                 than the chi-square function. 
  628. Error handling  none
  629. Return value    chiabs merit function.
  630. See also        VF_chi2
  631.  
  632.  
  633. ┌────────────────────────────────────────────────────────────────────────────┐
  634. │ VF_chi2                  VD_chi2                  VE_chi2                  │
  635. └────────────────────────────────────────────────────────────────────────────┘
  636. Function        Chi-square merit function.
  637. Syntax          #include <VFstd.h>
  638.                 float  VF_chi2(  fVector X,  fVector Y,
  639.                                  fVector InvVar, ui size );
  640. Description     chi²  =  sum( 1/sigmai² * (Xi - Yi)² ).
  641.                 The chi-square merit function is most often used to judge the
  642.                 quality of a fit. One vector (either X or Y) represents
  643.                 experimental values that are obtained with individual standard
  644.                 deviations sigmai, the other contains the values predicted on
  645.                 the basis of a theory or a model. If the experimental data are
  646.                 "normally" distributed, and if sigma is the correct measure
  647.                 for the quality of these data, then chi² is a measure for the
  648.                 quality of the fit. Rather than the standard deviations
  649.                 themselves, the routine needs the inverse of their squares
  650.                 (i.e., the inverse of the variances) to be passed as the
  651.                 vector InvVar.
  652. Error handling  none
  653. Return value    chi² merit function.
  654. See also        VF_meanwW,  VF_varianceVwW, VF_varianceV, VF_varianceCwW,
  655.                 VF_chiabs, VF_square, VF_inv, VF_linregress
  656.  
  657.  
  658. ┌────────────────────────────────────────────────────────────────────────────┐
  659. │ VF_chop                  VD_chop                  VE_chop                  │
  660. │ VF_choptoI               VD_choptoI               VE_choptoI               │
  661. │ VF_choptoSI              VD_choptoSI              VE_choptoSI              │
  662. │ VF_choptoLI              VD_choptoLI              VE_choptoLI              │
  663. │ VF_choptoQI              VD_choptoQI              VE_choptoQI              │
  664. │ VF_choptoU               VD_choptoU               VE_choptoU               │
  665. │ VF_choptoUS              VD_choptoUS              VE_choptoUS              │
  666. │ VF_choptoUL              VD_choptoUL              VE_choptoUL              │
  667. │ VF_choptoUI              VD_choptoUI              VE_choptoUI              │
  668. └────────────────────────────────────────────────────────────────────────────┘
  669. Function        "Chopping" towards zero.
  670. Syntax          #include <VFmath.h>
  671.                 int VF_chop(     fVector Y,  fVector X, ui size );
  672.                 int VF_choptoI(  iVector Y,  fVector X, ui size );
  673.                 int VF_choptoLI( liVector Y, fVector X, ui size );
  674.                      (similarly  all other functions of this family)
  675. Description     Each element of X is rounded to an integer number by "chopping
  676.                 off" the fractional part. For example, -3.9 yields -3, and
  677.                 +3.9 yields +3. The result is stored in Y. The functions
  678.                 VF_choptoI, VF_choptoLI, etc. convert the result into the
  679.                 various integer data types.
  680. Error handling  OVERFLOW errors are handled by setting the result to the
  681.                 extreme value possible. Negative numbers in the versions
  682.                 VF_choptoU, VF_choptoUS, VF_choptoUL, and VF_choptoUI  lead
  683.                 to DOMAIN errors; they are handled by setting the result to 0.
  684. Return value    0, if no error occurred, otherwise non-zero.
  685. See also        ceil, floor, VF_round,  VF_floor, VF_ceil
  686.  
  687.  
  688. ┌────────────────────────────────────────────────────────────────────────────┐
  689. │ V_closeErrorEventFile                                                      │
  690. └────────────────────────────────────────────────────────────────────────────┘
  691. Function        Restore default printing of error messages into stderr.
  692. Syntax          #include <VecLib.h>
  693.                 void  V_closeErrorEventFile( void );
  694. Description     After error messages have been redirected into an event file
  695.                 by V_setErrorEventFile, the default is restored by
  696.                 V_closeErrorEventFile and any further messages will be printed
  697.                 into stderr  which normally is the screen (see Chapter 5.5).
  698.                 Both of thess functions will not be included in versions of
  699.                 VectorLib for compilers that do already offer the possibility
  700.                 of printing error messages simultaneously to the screen and to
  701.                 an event file.
  702. Error handling  none
  703. Return value    none
  704. See also        V_noteError,  V_setErrorEventFile,  _matherr
  705.  
  706.  
  707. ┌────────────────────────────────────────────────────────────────────────────┐
  708. │ VF_cmp0                  VD_cmp0                  VE_cmp0                  │
  709. └────────────────────────────────────────────────────────────────────────────┘
  710. Function        Compares each element of a vector with 0 (signum function).
  711. Syntax          #include <VFmath.h>
  712.                 void VF_cmp0( fVector Y,  fVector X, ui size );
  713. Description     Each element of X is compared with 0 and the result of the
  714.                 comparison stored in Y:
  715.                     Yi =   1.0,   if  Xi > 0
  716.                     Yi =   0.0,   if  Xi = 0
  717.                     Yi =  -1.0,   if  Xi < 0.
  718.                 This function may also be called under its synonym VF_sgn.
  719. Error handling  none
  720. Return value    none
  721. See also        VF_cmp_..., VF_cmpC, VF_cmpV
  722.  
  723.  
  724. ┌────────────────────────────────────────────────────────────────────────────┐
  725. │ VF_cmpC                  VD_cmpC                  VE_cmpC                  │
  726. └────────────────────────────────────────────────────────────────────────────┘
  727. Function        Compares each element of a vector with a constant.
  728. Syntax          #include <VFmath.h>
  729.                 void VF_cmpC( fVector Y, fVector X, ui size, float C );
  730. Description     Each element of X is compared with C and the result of the
  731.                 comparison stored in Y:
  732.                      Yi =   1.0,   if  Xi > C
  733.                      Yi =   0.0,   if  Xi = C
  734.                      Yi =  -1.0,   if  Xi < C
  735.                 To compare with C=0, use more efficiently the function VF_cmp0.
  736. Error handling  none
  737. Return value    none
  738. See also        VF_cmp_..., VF_cmp0, VF_cmpV,  VF_iselementC
  739.  
  740.  
  741. ┌────────────────────────────────────────────────────────────────────────────┐
  742. │ VF_cmpV                  VD_cmpV                  VE_cmpV                  │
  743. └────────────────────────────────────────────────────────────────────────────┘
  744. Function        Compares each element of a vector with the corresponding
  745.                 element of another vector.
  746. Syntax          #include <VFmath.h>
  747.                 void VF_cmpV( fVector Z, fVector X, fVector Y, ui size );
  748. Description     Each element of X is compared with the corresponding element
  749.                 of Y and the result of the comparison stored in Z:
  750.                      Zi =   1.0,   if  Xi > Yi
  751.                      Zi =   0.0,   if  Xi = Yi
  752.                      Zi =  -1.0,   if  Xi < Yi.
  753. Error handling  none
  754. Return value    none
  755. See also        VF_cmp_..., VF_cmp0, VF_cmpV
  756.  
  757.  
  758. ┌────────────────────────────────────────────────────────────────────────────┐
  759. │ VF_cmp_...               VD_cmp_...               VE_cmp_...               │
  760. │     ...eq0     ...ne0     ...gt0     ...ge0     ...le0     ...lt0          │
  761. │     ...eqC     ...neC     ...gtC     ...geC     ...leC     ...ltC          │
  762. │     ...eqV     ...neV     ...gtV     ...geV     ...leV     ...ltV          │
  763. │     ...eq0ind  ...ne0ind  ...gt0ind  ...ge0ind  ...le0ind  ...lt0ind       │
  764. │     ...eqCind  ...neCind  ...gtCind  ...geCind  ...leCind  ...ltCind       │
  765. │     ...eqVind  ...neVind  ...gtVind  ...geVind  ...leVind  ...ltVind       │
  766. │         ...inclrange0C                ...exclrange0C                       │
  767. │         ...inclrangeCC                ...exclrangeCC                       │
  768. │         ...inclrange0Cind             ...exclrange0Cind                    │
  769. │         ...inclrangeCCind             ...exclrangeCCind                    │
  770. │ VCF_cmp_...              VCD_cmp_...              VCE_cmp_...              │
  771. │     ...eq0     ...ne0     ...eqC     ...neC     ...eqV     ...neV          │
  772. │     ...eq0ind  ...ne0ind  ...eqCind  ...neCind  ...eqVind  ...neVind       │
  773. └────────────────────────────────────────────────────────────────────────────┘
  774. Function        Comparisons
  775. Syntax          #include <VFmath.h>
  776.                 ui VF_cmp_eq0(  fVector Y,  fVector X,  ui size );
  777.                 ui VF_cmp_ne0(  fVector Y,  fVector X,  ui size );
  778.                 ui VF_cmp_gt0(  fVector Y,  fVector X,  ui size );
  779.                 ui VF_cmp_ge0(  fVector Y,  fVector X,  ui size );
  780.                 ui VF_cmp_lt0(  fVector Y,  fVector X , ui size );
  781.                 ui VF_cmp_le0(  fVector Y,  fVector X,  ui size );
  782.                 ui VF_cmp_eqC( fVector Y, fVector X, ui size, float C );
  783.                    ... (similarly: VF_cmp_neC,  VF_cmp_gtC, VF_cmp_geC,
  784.                                    VF_cmp_ltC, VF_cmp_leC)
  785.                 ui VF_cmp_eqV( fVector Z, fVector X, fVector Y, ui size);
  786.                    ... (similarly: VF_cmp_neV, VF_cmp_gtV, VF_cmp_geV,
  787.                                    VF_cmp_ltV, VF_cmp_leV)
  788.                 ui VF_cmp_eq0ind( uiVector Ind, fVector X, ui size );
  789.                    ... (similarly: VF_cmp_ne0ind,  VF_cmp_gt0ind,
  790.                                    VF_cmp_ge0ind,  VF_cmp_lt0ind,
  791.                                    VF_cmp_le0ind)
  792.                 ui VF_cmp_eqCind( uiVector Ind, fVector X, ui size,
  793.                                   float C );
  794.                    ...  (similarly: VF_cmp_neCind,  VF_cmp_gtCind,
  795.                                     VF_cmp_geCind,  VF_cmp_ltCind,
  796.                                     VF_cmp_leCind)
  797.                 ui VF_cmp_eqVind( uiVector Ind, fVector X, fVector Y,
  798.                                   ui size );
  799.                    ...  (similarly: VF_cmp_neVind,  VF_cmp_gtVind,
  800.                                     VF_cmp_geVind,  VF_cmp_ltVind,
  801.                                     VF_cmp_leVind)
  802.                    (similarly VD_ and VE_ versions)
  803.  
  804.                 ui VF_cmp_inclrange0C( fVector Y, fVector X, ui size,
  805.                                        float C );
  806.                 ui VF_cmp_exclrange0C( fVector Y, fVector X, ui size,
  807.                                        float C );
  808.                 ui VF_cmp_inclrangeCC( fVector Y, fVector X, ui size,
  809.                                        float CLo, float CHi );
  810.                 ui VF_cmp_exclrangeCC( fVector Y, fVector X, ui size,
  811.                                        float CLo, float CHi );
  812.                 ... (similarly  VD_ and VE_  versions)
  813.  
  814.                 ui VF_cmp_inclrange0Cind( uiVector Ind, fVector X, ui size,
  815.                                           float C );
  816.                 ui VF_cmp_exclrange0Cind( uiVector Ind, fVector X, ui size,
  817.                                           float C );
  818.                 ui VF_cmp_inclrangeCCind( uiVector Ind, fVector X, ui size,
  819.                                           float CLo, float CHi );
  820.                 ui VF_cmp_exclrangeCCind( uiVector Ind, fVector X, ui size,
  821.                                           float CLo, float CHi );
  822.                 ... (similarly  VD_ and VE_  versions)
  823.  
  824.                 ui VCF_cmp_eq0( cfVector Y, cfVector X,  ui size );
  825.                 ui VCF_cmp_ne0( cfVector Y, cfVector X,  ui size );
  826.                 ui VCF_cmp_eqC( cfVector Y, cfVector X,  ui size,
  827.                                 fComplex C );
  828.                 ui VCF_cmp_neC( cfVector Y, cfVector X,  ui size,
  829.                                 fComplex C );
  830.                 ui VCF_cmp_eqV( cfVector Z, cfVector X, cfVector Y,
  831.                                 ui size );
  832.                 ui VCF_cmp_neV( cfVector Z, cfVector X, cfVector Y,
  833.                                 ui size );
  834.                 ui VCF_cmp_eq0ind( uiVector Ind, cfVector X, ui size );
  835.                 ui VCF_cmp_ne0ind( uiVector Ind, cfVector X, ui size );
  836.                 ui VCF_cmp_eqCind( uiVector Ind, cfVector X, ui size,
  837.                                    fComplex C );
  838.                 ui VCF_cmp_neCind( uiVector Ind, cfVector X, ui size,
  839.                                    fComplex C );
  840.                 ui VCF_cmp_eqVind( uiVector Ind, cfVector X,
  841.                                    cfVector Y, ui size );
  842.                 ui VCF_cmp_neVind( uiVector Ind, cfVector X,
  843.                                    cfVector Y, ui size );
  844.                    (similarly VCD_ and  VCE_ versions)
  845. Description     a) Simple comparisons:
  846.                 Each element of X is compared with either 0, or a constant C,
  847.                 or the corresponding element of another vector, Y. The
  848.                 conditions to be tested are denoted by two letters as in
  849.                 ASSEMBLER or FORTRAN:
  850.                 "eq"  ("equal"):            True, if  Xi  = 0  (C, Yi, resp.)
  851.                 "ne"  ("not equal"):        True, if  Xi != 0  (C, Yi, resp.)
  852.                 "gt"  ("gteater than"):     True, if  Xi  > 0  (C, Yi, resp.)
  853.                 "ge"  ("greater or equal"): True, if  Xi >= 0  (C, Yi, resp.)
  854.                 "lt"  ("less than"):        True, if  Xi  < 0  (C, Yi, resp.)
  855.                 "le"  ("less or equal"):    True, if  Xi <= 0  (C, Yi, resp.).
  856.  
  857.                 For complex numbers, only the testing for equality ("eq") or
  858.                 inequality ("ne") makes sense and is available.
  859.  
  860.                 b) Range-checking functions
  861.                 Every element of X is checked if it falls into a range which
  862.                 is specified either by 0 and a (positive or negative) constant
  863.                 C, or by two constants, CLo and CHi. One has the choice
  864.                 between two versions, treating the range either as inclusive
  865.                 or as exclusive of the end points:
  866.                 VF_cmp_inclrange0C  checks for 0 <= x <= C (positive C) or
  867.                 0 >= x >= C (negative C), whereas VF_cmp_exclrangeCC checks
  868.                 for CLo < x < CHi.
  869.  
  870.                 a) and b):
  871.                 There are two different ways how the result of the comparison
  872.                 is treated. The result for each element of X is either stored
  873.                 as 1.0 for TRUE and 0.0 for FALSE in a vector of a floating-
  874.                 point data type (with the imaginary part in the complex
  875.                 versions always set to 0), or the indices of the elements for
  876.                 which the result is TRUE are stored in an index vector; the
  877.                 latter is the case in the functions with the suffix "ind" as
  878.                 the last part of their names, like in VF_cmp_neCind. In any
  879.                 case, the number of TRUE results encountered is returned by
  880.                 the function. The index-finding variant is especially useful
  881.                 to extract the elements for which the condition is TRUE into a
  882.                 sub-vector by VF_indpick; be sure to check that the return
  883.                 value nTrue is non-zero if you wish to do that (remember that
  884.                 the parameter size for any of the functions of this VectorLib
  885.                 library must be non-zero!).
  886. Error handling  none
  887. Return value    number of elements for which the condition was found to be
  888.                 TRUE.
  889. See also        VF_cmp0, VF_cmpC, VF_cmpV, VF_indpick, VF_iselementC
  890.  
  891.  
  892. ┌────────────────────────────────────────────────────────────────────────────┐
  893. │ VF_comb                  VD_comb                  VE_comb                  │
  894. └────────────────────────────────────────────────────────────────────────────┘
  895. Function        Initializes a vector with a comb function.
  896. Syntax          #include <VFstd.h>
  897.                 void VF_comb( fVector X, ui size, ui spac, float C );
  898. Description     Xi  = C,     i = 0,  1*spac,  2*spac,...
  899.                 Xi  = 0,     otherwise
  900. Error handling  If the spacing spac of the comb exceeds size, an error message
  901.                 "Invalid parameter(s)" is displayed and the program aborted.
  902. Return value    none
  903. See also        VF_equ1, VF_equ0, VF_equC
  904.  
  905.  
  906. ┌────────────────────────────────────────────────────────────────────────────┐
  907. │ VCF_complex              VCD_complex              VCE_complex              │
  908. └────────────────────────────────────────────────────────────────────────────┘
  909. Function        Constructs a Cartesian complex vector from its real and
  910.                 imaginary parts. Implemented as a macro that calls VF_ReImtoC,
  911.                 VD_ReImtoC, VE_ReImtoC, resp.  See these functions for details.
  912.  
  913.  
  914. ┌────────────────────────────────────────────────────────────────────────────┐
  915. │ VCF_conj                 VCD_conj                VCE_conj                  │
  916. └────────────────────────────────────────────────────────────────────────────┘
  917. Function        Find the complex conjugate of a vector.
  918. Syntax          #include <VCFmath.h>
  919.                 int  VCF_conj(  cfVector Y,  cfVector X,  ui size );
  920. Description     Re(Yi)  =   Re(Xi)
  921.                 Im(Yi)  =  -Im(Xi)
  922. Error handling  none
  923. Return value    always 0
  924. See also        VCF_neg,  VF_abs
  925.  
  926.  
  927. ┌────────────────────────────────────────────────────────────────────────────┐
  928. │ V_continuePlot                                                             │
  929. └────────────────────────────────────────────────────────────────────────────┘
  930. Function        Get back into the last viewport used for plotting
  931. Syntax          #include <Vgraph.h>
  932.                 void V_continuePlot( void );
  933. Description     If one wants to add new DataPlots to an existing coordinate
  934.                 system after one has already defined a new viewport (e.g.,
  935.                 for text output), this function takes one back to the most
  936.                 recently used coordinate system.
  937. Error handling  none
  938. Return value    none
  939. See also        V_getCoordSystem, V_setCoordSystem, V_setPlotRegion
  940.  
  941.  
  942. ┌────────────────────────────────────────────────────────────────────────────┐
  943. │ VF_convolve              VD_convolve              VE_convolve              │
  944. └────────────────────────────────────────────────────────────────────────────┘
  945. Function        Calculates the convolution of a vector with a response
  946.                 function.
  947. Syntax          #include <VFstd.h>
  948.                 void VF_convolve( fVector Y, fVector Flt, fVector X,
  949.                                   fVector Rsp, ui size );
  950. Description     The convolution of X with the response function Rsp is
  951.                 calculated and stored in Y.  A filter Flt is also calculated.
  952.                 If more than one vector is to be convolved with the same Rsp,
  953.                 use VF_convolve only once and use VF_filter for the other
  954.                 vectors.
  955.                 The response has to be stored in Rsp in wrap-around order:
  956.                 the response for zero and positive times (or whatever the
  957.                 independent variable is) is stored in Rsp[0]  to Rsp[size/2]
  958.                 and the response for negative times (beginning with the most
  959.                 negative time) in Rsp[size/2+1] to Rsp[size-1].  You may wish
  960.                 to use VF_rotate or VF_reflect to achieve this wrap-around
  961.                 order and to construct the response vector.
  962.                 Notice that Rsp has to be of the same size as X.
  963.  
  964.                 The result of the convolution appears scaled with the sum
  965.                 of all elements of Rsp. Normally, therefore, Rsp should be
  966.                 normalized to 1.0.
  967.  
  968.                 X, Y, Rsp, and Flt must all be of the same size, which has to
  969.                 be an integer power of 2.  X may be overwritten by Y, Rsp may
  970.                 be overwritten by Flt, but X and Flt as well as Y and Rsp
  971.                 have to be distinct from each other.
  972.  
  973.                 The treatment of round-off errors in the construction of
  974.                 Flt may be modified by VF_setRspEdit.
  975.  
  976. Example         VF_ramp(  Time,  1024, 0.0, 1.0 );
  977.                 VF_Gauss( Rsp, Time, 513, 10.0, 0.0, 1.0 );
  978.                       /* Response function for zero and positive times */
  979.                 VF_reflect( Rsp+1, 1023 );
  980.                       /* ... and for negative times  */
  981.                 VF_divC( Rsp, Rsp, 1024, VF_sum( Rsp, 1024 ) );
  982.                       /*  Normalisation of Rsp */
  983.                 VF_convolve(  X, Rsp, X, Rsp, 1024 );
  984.                       /* Convolution;  X is overwritten by the desired result
  985.                          and Rsp is overwritten by the frequency filter    */
  986.                 VF_filter( Y, Y, Rsp, 1024 );
  987.                       /* Next convolution: instead of another call to
  988.                          VF_convolve,  Y is filtered using the frequency
  989.                          filter just obtained                            */
  990.  
  991.                 Mathematically, this convolution is based on the assumption
  992.                 that X is periodic; it still works well if X is non-periodic
  993.                 but converges on both ends to the same value X[0] = X[size-1].
  994.                 If that is not the case, the first and the last elements of Y
  995.                 are spoiled by "wrap-around" from elements on the other side.
  996.                 Extrapolate X on both sides in order to imbed the original X
  997.                 in a larger vector, if wrap-around is a problem. The minimum
  998.                 number of elements to be added equals half the width of the
  999.                 response function. (In the case of an asymmetric response
  1000.                 function, it is the broader wing that counts.) After con-
  1001.                 volving the larger vector with the response function, it
  1002.                 will be the dummy elements just added which become spoiled
  1003.                 by wrap-around. Those elements of the result vector which
  1004.                 correspond to the original X will represent the desired
  1005.                 convolution of X with Rsp.
  1006.                 If X is smoothly converging on both sides to different values,
  1007.                 it is not necessary to employ the procedure just described.
  1008.                 Rather, the difference between the end points may be regarded
  1009.                 as a linear trend. In this case, remove the trend, convolve
  1010.                 the resultant vector and add the trend to the result.
  1011.  
  1012. Example         d = (X[size-1] - X[0]) / (size-1);
  1013.                 VF_ramp( Trend, size, 0.0, d );
  1014.                 VF_subV( Y, X, Trend, size );
  1015.                 VF_convolve( Y, Flt, Y, Rsp, size );
  1016.                 VF_addV( Y, Y, Trend, size );
  1017.  
  1018.                 You might notice that Flt is declared as fVector rather than
  1019.                 cfVector,  although the information stored in Flt consists of
  1020.                 complex numbers. The reason is that these numbers are stored
  1021.                 in the packed complex format (as described for VF_FFT) which
  1022.                 is used only in connection with Fourier-Transform operations
  1023.                 of real vectors.
  1024.  
  1025.                 About special versions with the prefixes  VFs_  and VFl_,
  1026.                 consult chapter 4.8.
  1027. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_convolve
  1028.                 is based) complains "Size must be an integer power of 2"
  1029.                 and the program is aborted.
  1030. Return value    none
  1031. See also        VF_filter,  VF_deconvolve, VF_FFT,  VF_autocorr, VF_xcorr,
  1032.                 VF_spectrum
  1033.  
  1034.  
  1035. ┌────────────────────────────────────────────────────────────────────────────┐
  1036. │ VF_corrcoeff             VD_corrcoeff             VE_corrcoeff             │
  1037. └────────────────────────────────────────────────────────────────────────────┘
  1038. Function        Linear correlation coefficient between two distributions
  1039. Syntax          #include <VFstd.h>
  1040.                 float VF_corrcoeff( fVector X, fVector Y, ui size,
  1041.                                     float Xmean, float Ymean );
  1042. Description     The linear correlation coefficient ("Pearson's r") takes on
  1043.                 values between -1.0 and +1.0.  The mean values of both
  1044.                 distributions must be known. They are passed to VF_corrcoeff
  1045.                 as the parameters Xmean and Ymean.
  1046. Example         r = VF_corrcoeff(  X,  Y,  n,  VF_mean( X, n ),
  1047.                                                VF_mean( Y, n ) );
  1048. Error handling  none
  1049. Return value    linear correlation coefficient r
  1050. See also        VF_mean,  VF_varianceV,  VF_linregress
  1051.  
  1052.  
  1053. ┌────────────────────────────────────────────────────────────────────────────┐
  1054. │ VF_cos                   VD_cos                   VE_cos                   │
  1055. │ VFx_cos                  VDx_cos                  VEx_cos                  │
  1056. │ VFr_cos                  VDr_cos                  VEr_cos                  │
  1057. │ VFrx_cos                 VDrx_cos                 VErx_cos                 │
  1058. │ VCF_cos                  VCD_cos                  VCE_cos                  │
  1059. │ VCFx_cos                 VCDx_cos                 VCEx_cos                 │
  1060. └────────────────────────────────────────────────────────────────────────────┘
  1061. Function        Cosine function
  1062. Syntax          #include <VFmath.h>
  1063.                 int  VF_cos(   fVector  Y,  fVector  X, ui size );
  1064.                 int  VFx_cos(  fVector  Y,  fVector  X, ui size,
  1065.                                float A, float B, float C );
  1066.                 int  VFr_cos(   fVector  Y,  fVector  X, ui size );
  1067.                 int  VFrx_cos(  fVector  Y,  fVector  X, ui size,
  1068.                                 float A, float B, float C );
  1069. Beschreibung    normal versions:     Yi  =  cos ( Xi )
  1070.                 expanded versions:   Yi  =  C *  cos ( A*Xi + B )
  1071.                 For large values of Xi, round-off error becomes appreciable;
  1072.                 if the Xi values are representable as rational multiples of Pi,
  1073.                 it is better to use  VF_cosrpi  than VF_cos.
  1074.                 If, on the other hand, one can be sure that all Xi are within
  1075.                 the range  -Pi/2 <= Xi <= +Pi/2, one can employ the faster
  1076.                 reduced-range versions with the prefixes VFr_  and VFrx_.
  1077. Error handling  Precision errors in the real-value functions lead to a default
  1078.                 result of 1.0 (as if the input were 0.0) and to a non-zero
  1079.                 return value, but are otherwise ignored; _matherr is not
  1080.                 called.
  1081.                 OVERFLOW errors can only occur in the complex versions and
  1082.                 lead to a result of ±HUGE_VAL.
  1083. Return value    0, if no error occurred, otherwise non-zero.
  1084. See also        VF_cos2,  VF_cosrpi,  VF_sin,  VF_cosh,  VF_acos,  cos
  1085.  
  1086.  
  1087. ┌────────────────────────────────────────────────────────────────────────────┐
  1088. │ VF_cos2                  VD_cos2                  VE_cos2                  │
  1089. │ VFx_cos2                 VDx_cos2                 VEx_cos2                 │
  1090. │ VFr_cos2                 VDr_cos2                 VEr_cos2                 │
  1091. │ VFrx_cos2                VDrx_cos2                VErx_cos2                │
  1092. └────────────────────────────────────────────────────────────────────────────┘
  1093. Function        Square of the cosine function
  1094. Syntax          #include <VFmath.h>
  1095.                 int  VF_cos2(  fVector  Y,  fVector  X, ui size );
  1096.                 int  VFx_cos2( fVector  Y,  fVector  X, ui size,
  1097.                                float A, float B, float C );
  1098. Description     normal versions:    Yi  =  cos²( Xi )
  1099.                 expanded versions:  Yi  =  C *  cos²( A*Xi + B )
  1100.                 Calculating the squared trigonometric functions directly is
  1101.                 faster and sometimes more accurate than first calculating the
  1102.                 trigonometric function itself and squaring it afterwards.
  1103.                 The reduced-range versions with the prefixes VFr_ and VFrx_
  1104.                 are for situations in which one can be sure that all input
  1105.                 values lie in the range  -Pi/2 <= Xi <= +Pi/2.
  1106. Error handling  Precision errors lead to a default result of 1.0 (as if the
  1107.                 input were 0.0) and a non-zero return value, but are otherwise
  1108.                 ignored; _matherr is not called.
  1109.                 OVERFLOW errors can only occur in the complex versions and
  1110.                 lead to a result of ±HUGE_VAL.
  1111. Return value    0, if no error occurred, otherwise non-zero.
  1112. See also        VF_cos,   VF_cosrpi,   cos
  1113.  
  1114.  
  1115. ┌────────────────────────────────────────────────────────────────────────────┐
  1116. │ VF_cosec                 VD_cosec                 VE_cosec                 │
  1117. │ VFx_cosec                VDx_cosec                VEx_cosec                │
  1118. └────────────────────────────────────────────────────────────────────────────┘
  1119. Function        Cosecant function
  1120. Syntax          #include <VFmath.h>
  1121.                 int  VF_cosec(  fVector  Y,  fVector  X, ui size );
  1122.                 int  VFx_cosec( fVector  Y,  fVector  X, ui size,
  1123.                                 float A, float B, float C );
  1124. Description     normal versions:     Yi =  cosec ( Xi )   =  1.0 / sin ( Xi )
  1125.                 expanded versions:   Yi =  C * cosec ( A*Xi + B )
  1126.                 The cosecant is defined as the inverse of the sine (not to be
  1127.                 mistaken for the arcus function arcsin!) For large values of
  1128.                 Xi, round-off error becomes appreciable; if the Xi values are
  1129.                 representable as rational multiples of Pi, it is better to use
  1130.                 VF_cosecrpi  than VF_cosec.
  1131. Error handling  For TLOSS precision errors, the default result is arbitrarily
  1132.                 set to 1.0 (as an exception from the general rule which would
  1133.                 require the result to be the mean of the results for +0 and -0.
  1134.                 This would be 0.0. However, zero is not a valid result for the
  1135.                 cosecant function). For SING and OVERFLOW errors, the default
  1136.                 result is ±HUGE_VAL.
  1137. Return value    0, if no error occurred, otherwise non-zero.
  1138. See also        VF_cosec2,  VF_cosecrpi,  VF_sin,  VF_cosech,  sin
  1139.  
  1140.  
  1141. ┌────────────────────────────────────────────────────────────────────────────┐
  1142. │ VF_cosec2                VD_cosec2                VE_cosec2                │
  1143. │ VFx_cosec2               VDx_cosec2               VEx_cosec2               │
  1144. └────────────────────────────────────────────────────────────────────────────┘
  1145. Function        Square of the cosecant function
  1146. Syntax          #include <VFmath.h>
  1147.                 int  VF_cosec2(  fVector  Y,  fVector  X, ui size );
  1148.                 int  VFx_cosec2( fVector  Y,  fVector  X, ui size,
  1149.                                  float A, float B, float C );
  1150. Description     normal versions:    Yi =  cosec² ( Xi )
  1151.                 expanded versions:  Yi =  C *  cosec² ( A*Xi + B )
  1152.                 Calculating the squared trigonometric functions directly is
  1153.                 faster and sometimes more accurate than first calculating the
  1154.                 trigonometric function itself and squaring it afterwards.
  1155. Error handling  For SING, OVERFLOW, and TLOSS errors, the default result is
  1156.                 ±HUGE_VAL.
  1157. Return value    0, if no error occurred, otherwise non-zero.
  1158. See also        VF_cosec,   VF_cosecrpi,   sin
  1159.  
  1160.  
  1161. ┌────────────────────────────────────────────────────────────────────────────┐
  1162. │ VF_cosech                VD_cosech                VE_cosech                │
  1163. │ VFx_cosech               VDx_cosech               VEx_cosech               │
  1164. └────────────────────────────────────────────────────────────────────────────┘
  1165. Function        Hyperbolic cosecant function
  1166. Syntax          #include <VFmath.h>
  1167.                 int  VF_cosech(  fVector  Y,  fVector  X, ui size );
  1168.                 int  VFx_cosech( fVector  Y,  fVector  X, ui size,
  1169.                                  float A, float B, float C );
  1170. Description     normal versions:     Yi =  cosech ( Xi )
  1171.                 expanded versions:   Yi =  C * cosech ( A*Xi+B )
  1172. Error handling  SING errors lead to a default result of 0 (mean of +HUGE_VAL
  1173.                 and -HUGE_VAL); OVERFLOW errors lead to a default result
  1174.                 of ±HUGE_VAL.
  1175. Return value    0, if no error occurred, otherwise non-zero.
  1176. See also        VF_sinh,  VF_exp,   sinh
  1177.  
  1178.  
  1179. ┌────────────────────────────────────────────────────────────────────────────┐
  1180. │ VF_cosecrpi             VD_cosecrpi              VE_cosecrpi               │
  1181. │ VF_cosecrpi2            VD_cosecrpi2             VE_cosecrpi2              │
  1182. │ VF_cosecrpi3            VD_cosecrpi3             VE_cosecrpi3              │
  1183. └────────────────────────────────────────────────────────────────────────────┘
  1184. Function        Cosecant function of fractional multiples of Pi
  1185. Syntax          #include <VFmath.h>
  1186.                 int VF_cosecrpi(  fVector Y, iVector P, ui size, int q );
  1187.                 int VF_cosecrpi2( fVector Y, iVector P, ui size, int q );
  1188.                 int VF_cosecrpi3( fVector Y, iVector P, ui size, int q );
  1189. Description     Yi  =  cosec( (P[i] / q) * Pi )
  1190.                 The cosecant of fractional multiples of Pi is calculated.
  1191.                 There are three versions: VF_cosecrpi is for general use
  1192.                 with any arbitrary denominator q. If q is a power of 2,
  1193.                 VF_cosecrpi2 should be used which is a highly optimized
  1194.                 version using a look-up table. If q is a multiple of 3,
  1195.                 VF_cosecrpi3 should be used. VF_cosecrpi2 and VF_cosecrpi3
  1196.                 work also with q values they are not optimized for; in this
  1197.                 case, however, memory space is wasted for the tables.
  1198. Error handling  SING errors occur if P[i] / q  is exactly an integer number;
  1199.                 the default result is 0.0 (which is the mean of +HUGE_VAL and
  1200.                 -HUGE_VAL; in contrast to VF_cosec, 0.0 is chosen irrespective
  1201.                 of the fact that it is not a valid result of the cosecant
  1202.                 function);
  1203.                 q must be non-zero; this is, however, not tested for.
  1204. Return value    0, if no error occurred, otherwise non-zero.
  1205. See also        VF_cosec,    sin
  1206.  
  1207.  
  1208. ┌────────────────────────────────────────────────────────────────────────────┐
  1209. │ VF_cosectab2             VD_cosectab2             VE_cosectab2             │
  1210. │ VF_cosectab3             VD_cosectab3             VE_cosectab3             │
  1211. └────────────────────────────────────────────────────────────────────────────┘
  1212.                 Table of cosecant values for arguments between 0 and Pi/2.
  1213. Syntax          #include <xmath.h>
  1214.                 extern float     VF_cosectab2[ VF_tabsz2+1 ];
  1215.                 extern double    VD_cosectab2[ VD_tabsz2+1 ];
  1216.                 extern extended  VE_cosectab2[ VE_tabsz2+1 ];
  1217.                 extern float     VF_cosectab3[ VF_tabsz3+1 ];
  1218.                 extern double    VD_cosectab3[ VD_tabsz3+1 ];
  1219.                 extern extended  VE_cosectab3[ VE_tabsz3+1 ];
  1220. Description     VF_cosectab2[ i ]  =  cosec( i/(2*VF_tabsz2) * Pi ),
  1221.                                                       i=0,...,VF_tabsz2-1
  1222.                 VF_cosectab3[ i ]  =  cosec ( i/(2*VF_tabsz3) * Pi ),
  1223.                                                       i=0,...,VF_tabsz3-1
  1224.                 VF_cosectab2[ VF_tabsz2 ]  =  VF_cosectab3[ VF_tabsz3 ] = 0
  1225.                 These look-up tables of cosecant values for arguments between
  1226.                 0 and Pi/2 are used by VF_cosecrpi2 and the other functions
  1227.                 of that family and are also available to the user. Since the
  1228.                 cosecant of Pi/2 is not defined, zero is stored at its place.
  1229.                 The symbols VF_tabsz2 etc., denoting the size of the tables,
  1230.                 are defined in <xmath.h>.
  1231. See also        VF_cosecrpi2,  VF_tantab2,  VF_sintab2
  1232.  
  1233.  
  1234. ┌────────────────────────────────────────────────────────────────────────────┐
  1235. │ VF_cosh                  VD_cosh                  VE_cosh                  │
  1236. │ VCF_cosh                 VCD_cosh                 VCE_cosh                 │
  1237. │ VFx_cosh                 VDx_cosh                 VEx_cosh                 │
  1238. │ VCFx_cosh                VCDx_cosh                VCEx_cosh                │
  1239. └────────────────────────────────────────────────────────────────────────────┘
  1240. Function        Hyperbolic cosine function
  1241. Syntax          #include <VFmath.h>
  1242.                 int  VF_cosh(  fVector  Y,  fVector  X, ui size );
  1243.                 int  VFx_cosh( fVector  Y,  fVector  X, ui size,
  1244.                                float A, float B, float C );
  1245.                 int  VCF_cosh(  cfVector Y,  cfVector X, ui size );
  1246.                 int  VCFx_cosh( cfVector Y,  cfVector X, ui size,
  1247.                                 fComplex A, fComplex B, fComplex C );
  1248. Description     normal versions:     Yi =  cosh ( Xi )
  1249.                 expanded versions:   Yi =  C * cosh ( A*Xi+B )
  1250. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  1251. Return value    0, if no error occurred, otherwise non-zero.
  1252. See also        VF_sinh,  VF_exp,   cosh
  1253.  
  1254.  
  1255. ┌────────────────────────────────────────────────────────────────────────────┐
  1256. │ VF_cosrpi                VD_cosrpi                VE_cosrpi                │
  1257. │ VF_cosrpi2               VD_cosrpi2               VE_cosrpi2               │
  1258. │ VF_cosrpi3               VD_cosrpi3               VE_cosrpi3               │
  1259. └────────────────────────────────────────────────────────────────────────────┘
  1260. Function        Cosine function of fractional multiples of Pi
  1261. Syntax          #include <VFmath.h>
  1262.                 int VF_cosrpi(  fVector Y, iVector P, ui size, int q );
  1263.                 int VF_cosrpi2( fVector Y, iVector P, ui size, int q );
  1264.                 int VF_cosrpi3( fVector Y, iVector P, ui size, int q );
  1265. Description     Yi  =  cos( (P[i] / q) * Pi )
  1266.                 The cosine of fractional multiples of Pi is calculated. There
  1267.                 are three versions: VF_cosrpi is for general use with any
  1268.                 arbitrary denominator q. If q is a power of 2,  VF_cosrpi2
  1269.                 should be used which is a highly optimized version reading the
  1270.                 results from a look-up table, if possible. If q is a multiple
  1271.                 of 3,  VF_cosrpi3 should be used. VF_cosrpi3 offers a
  1272.                 convenient way to use degrees instead of radians; if, for
  1273.                 example, q is 180, the unit of the elements of P is "degree".
  1274.                 VF_cosrpi2 and VF_cosrpi3 work also with q values they are not
  1275.                 optimized for; in this case, however, memory space is wasted
  1276.                 for the tables.
  1277. Error handling  These functions are error-proof, as long as q != 0.
  1278. Return value    always 0
  1279. See also        VF_cos,    cos
  1280.  
  1281.  
  1282. ┌────────────────────────────────────────────────────────────────────────────┐
  1283. │ VF_cot                   VD_cot                   VE_cot                   │
  1284. │ VFx_cot                  VDx_cot                  VEx_cot                  │
  1285. └────────────────────────────────────────────────────────────────────────────┘
  1286. Function        Cotangent function
  1287. Syntax          #include <VFmath.h>
  1288.                 int  VF_cot(   fVector  Y,  fVector  X, ui size );
  1289.                 int  VFx_cot(  fVector  Y,  fVector  X, ui size,
  1290.                                float A, float B, float C );
  1291. Description     normal versions:     Yi  =  cot ( Xi )
  1292.                 expanded versions:   Yi  =  C * cot ( A*Xi+B )
  1293.                 The cotangent is defined as the inverse of the tangent (not to
  1294.                 be mistaken for the arcus function arctan!) For large values
  1295.                 of Xi, round-off error becomes appreciable; if the Xi values
  1296.                 are representable as rational multiples of Pi, it is better to
  1297.                 use VF_cotrpi  than VF_cot.
  1298. Error handling  For TLOSS precision errors, the default result is 0.0 (which
  1299.                 is the mean of +HUGE_VAL and -HUGE_VAL); for SING and OVERFLOW
  1300.                 errors, the default result is ±HUGE_VAL.
  1301. Return value    0, if no error occurred, otherwise non-zero.
  1302. See also        VF_cot2,  VF_cotrpi,  VF_coth,  VF_atan,  VF_atan2, tan
  1303.  
  1304.  
  1305. ┌────────────────────────────────────────────────────────────────────────────┐
  1306. │ VF_cot2                  VD_cot2                  VE_cot2                  │
  1307. │ VFx_cot2                 VDx_cot2                 VEx_cot2                 │
  1308. └────────────────────────────────────────────────────────────────────────────┘
  1309. Function        Square of the cotangent function
  1310. Syntax          #include <VFmath.h>
  1311.                 int  VF_cot2(  fVector  Y,  fVector  X, ui size );
  1312.                 int  VFx_cot2( fVector  Y,  fVector  X, ui size,
  1313.                                float A, float B, float C );
  1314. Description     normal versions:   Yi  =  cot²( Xi )
  1315.                 expanded versions: Yi  =  C *  cot²( A*Xi+B )
  1316.                 Calculating the squared trigonometric functions directly is
  1317.                 faster and sometimes more accurate than first calculating the
  1318.                 trigonometric function itself and squaring it afterwards.
  1319. Error handling  For SING,  OVERFLOW and TLOSS errors, the default result is
  1320.                 +HUGE_VAL (multiplied by the sign of C in the expanded
  1321.                 versions).
  1322. Return value    0, if no error occurred, otherwise non-zero.
  1323. See also        VF_cot,   VF_cotrpi,   sin
  1324.  
  1325.  
  1326. ┌────────────────────────────────────────────────────────────────────────────┐
  1327. │ VF_coth                  VD_coth                  VE_coth                  │
  1328. │ VFx_coth                 VDx_coth                 VEx_coth                 │
  1329. └────────────────────────────────────────────────────────────────────────────┘
  1330. Function        Hyperbolic cotangent function
  1331. Syntax          #include <VFmath.h>
  1332.                 int  VF_coth(  fVector  Y,  fVector  X, ui size );
  1333.                 int  VFx_coth( fVector  Y,  fVector  X, ui size,
  1334.                                float A, float B, float C );
  1335. Description     normal versions:     Yi  =  coth ( Xi )
  1336.                 expanded versions:   Yi  =  C * coth ( A*Xi+B )
  1337. Error handling  SING errors lead to a default result of 0.0 (the mean of
  1338.                 +HUGE_VAL and -HUGE_VAL);  OVERFLOW errors lead to a default
  1339.                 result of ±HUGE_VAL.
  1340. Return value    0, if no error occurred, otherwise non-zero.
  1341. See also        VF_sinh,  VF_tanh,  VF_exp,   tanh
  1342.  
  1343.  
  1344. ┌────────────────────────────────────────────────────────────────────────────┐
  1345. │ VF_cotrpi                VD_cotrpi                VE_cotrpi                │
  1346. │ VF_cotrpi2               VD_cotrpi2               VE_cotrpi2               │
  1347. │ VF_cotrpi3               VD_cotrpi3               VE_cotrpi3               │
  1348. └────────────────────────────────────────────────────────────────────────────┘
  1349. Function        Cotangent function of rational multiples of Pi
  1350. Syntax          #include <VFmath.h>
  1351.                 int VF_cotrpi(  fVector Y, iVector P, ui size, int q );
  1352.                 int VF_cotrpi2( fVector Y, iVector P, ui size, int q );
  1353.                 int VF_cotrpi3( fVector Y, iVector P, ui size, int q );
  1354. Description     Yi  =  cot( (P[i] / q) * Pi )
  1355.                 The cotangent of fractional multiples of Pi is calculated.
  1356.                 There are three versions: VF_cotrpi is for general use with
  1357.                 any arbitrary denominator q. If q is a power of 2,  VF_cotrpi2
  1358.                 should be used which is a highly optimized version using a
  1359.                 look-up table. If q is a multiple of 3,  VF_cotrpi3 should be
  1360.                 used. VF_cotrpi2 and VF_cotrpi3 also work with q values they
  1361.                 are not optimized for; in this case, however, memory space is
  1362.                 wasted for the tables.
  1363. Error handling  SING errors occur if P[i] / q  is a whole number. The default
  1364.                 result is 0.0 (which is the mean of +HUGE_VAL and -HUGE_VAL);
  1365.                 q must be non-zero; this is, however, not tested for.
  1366. Return value    0, if no error occurred, otherwise non-zero.
  1367. See also        VF_cot,    tan
  1368.  
  1369.  
  1370. ┌────────────────────────────────────────────────────────────────────────────┐
  1371. │ VF_cprint                VD_cprint                VE_cprint                │
  1372. │ VCF_cprint               VCD_cprint               VCE_cprint               │
  1373. │ VI_cprint           VSI_cprint          VLI_cprint          VQI_cprint     │
  1374. │ VU_cprint           VUS_cprint          VUL_cprint          VUI_cprint     │
  1375. └────────────────────────────────────────────────────────────────────────────┘
  1376. Function        print a vector to the screen. Only Borland C++; DOS and
  1377.                 Win32 console applications.
  1378. Syntax          #include <VFstd.h>
  1379.                 VF_cprint( fVector X, ui size, unsigned nperline );
  1380. Description     size elements of X are printed to the screen (or "console"),
  1381.                 into the actual text window, nperline elements in each line.
  1382.  
  1383.                 The display starts always with a new line. Please note that
  1384.                 this may lead to an empty line at the beginning.
  1385.                 Each line begins with the index of the first element printed
  1386.                 into that line. The index is followed by a colon and by
  1387.                 the requested nperline elements.
  1388.                 Complex numbers are printed in braces, with the real and
  1389.                 imaginary parts separated by a komma:  {Re, Im}.
  1390.  
  1391.                 The display pauses every screenful. The user is prompted
  1392.                 after each page to continue or to stop printing.
  1393.                 The number of digits per element is determined by the
  1394.                 available space, which depends in turn on the line width
  1395.                 and on the parameter nperline.
  1396.  
  1397.                 This family of functions is available only for DOS and
  1398.                 Win32 console applications. It should not be used within
  1399.                 TurboVision DOS programs.
  1400. Error handling  If nperline exceeds the maximum number of entries possible in
  1401.                 the current text mode, an error message "Cannot use requested
  1402.                 format (too many entries per line)!" is generated; in this
  1403.                 case, the program chooses the maximum number nperline that is
  1404.                 possible.
  1405. Return value    none
  1406. See also        cprintf, VF_fprint,  VF_print,  VF_write, VF_store
  1407.  
  1408.  
  1409. ┌────────────────────────────────────────────────────────────────────────────┐
  1410. │ VF_CtoAbs                VD_CtoAbs                VE_CtoAbs                │
  1411. └────────────────────────────────────────────────────────────────────────────┘
  1412. Function        Absolute value (magnitude) of complex numbers
  1413. Syntax          #include <VCFstd.h>
  1414.                 void VF_CtoAbs( fVector Abs, cfVector X, ui size );
  1415. Description     Abs[i]  =  sqrt( Re²(Xi) + Im²(Xi) )
  1416.                 The absolute value, i.e. the magnitude of each element of the
  1417.                 complex vector X is calculated. This function is almost
  1418.                 identical to VCF_abs, but does not perform any error handling.
  1419. Error handling  none
  1420. Return value    none
  1421. See also        VCF_abs,  VF_PolartoC, VF_CtoReIm, VF_CtoArg, VF_CtoNorm
  1422.  
  1423.  
  1424. ┌────────────────────────────────────────────────────────────────────────────┐
  1425. │ VF_CtoArg                VD_CtoArg                VE_CtoArg                │
  1426. └────────────────────────────────────────────────────────────────────────────┘
  1427. Function        Argument (angle) of complex numbers
  1428. Syntax          #include <VCFstd.h>
  1429.                 void VF_CtoArg( fVector Arg, cfVector X, ui size );
  1430. Description     Arg[i]  =  arctan( Im(Xi) / Re(Xi) )
  1431.                 The argument, i.e. the angle of each element of the complex
  1432.                 vector X is calculated. For Cartesian coordinates {0, 0}, the
  1433.                 angle is arbitrary and is set to zero.
  1434.                 When necessary, depending on the signs of Re(Xi) and Im(Xi),
  1435.                 Pi is added or subtracted from the arctan to obtain the
  1436.                 correct quadrant.
  1437. Error handling  none
  1438. Return value    none
  1439. See also        VF_PolartoC, VF_CtoPolar, VF_atan2, VF_CtoAbs, VF_CtoReIm
  1440.  
  1441.  
  1442. ┌────────────────────────────────────────────────────────────────────────────┐
  1443. │ VF_CtoIm                 VD_CtoIm                 VE_CtoIm                 │
  1444. └────────────────────────────────────────────────────────────────────────────┘
  1445. Function        Extract the imaginary part from a complex vector.
  1446. Syntax          #include <VCFstd.h>
  1447.                 void VF_CtoIm( fVector Im, cfVector X, ui size );
  1448. Description     The imaginary part of the complex vector X is extracted and
  1449.                 stored in Im.
  1450. Error handling  none
  1451. Return value    none
  1452. See also        VF_CtoReIm, VF_ReImtoC,  VF_ImtoC, VF_PolartoC, VF_extract
  1453.  
  1454.  
  1455. ┌────────────────────────────────────────────────────────────────────────────┐
  1456. │ VF_CtoNorm               VD_CtoNorm               VE_CtoNorm               │
  1457. └────────────────────────────────────────────────────────────────────────────┘
  1458. Function        Norm (square of the absolute value) of complex numbers
  1459. Syntax          #include <VCFstd.h>
  1460.                 void VF_CtoNorm( fVector Norm, cfVector X, ui size );
  1461. Description     Norm[i]  =  Re²(Xi) + Im²(Xi)
  1462.                 This definition of the Norm of a complex number is the same as
  1463.                 in C++, but it is not consistent with the usual definition in
  1464.                 mathematics, where the term "norm" is used as a synomym for
  1465.                 "absolute value" or "magnitude". As defined here, the Norm is
  1466.                 the square of the absolute value. The absolute value itself is
  1467.                 available by the functions VF_CtoAbs (without error handling)
  1468.                 and VCF_abs (with error handling).
  1469. Error handling  none
  1470. Return value    none
  1471. See also        VF_PolartoC, VF_CtoReIm, VF_CtoArg, VF_CtoAbs
  1472.  
  1473.  
  1474. ┌────────────────────────────────────────────────────────────────────────────┐
  1475. │ VF_CtoPolar              VD_CtoPolar              VE_CtoPolar              │
  1476. └────────────────────────────────────────────────────────────────────────────┘
  1477. Function        Transformation of complex numbers from Cartesian into polar
  1478.                 coordinates.
  1479. Syntax          #include <VCFstd.h>
  1480.                 void VF_CtoPolar( fVector Mag, fVector Arg,
  1481.                                   cfVector X, ui size );
  1482. Description     The polar coordinates Mag (magnitude, absolute value) and Arg
  1483.                 (argument, angle) of each element of the Cartesian complex
  1484.                 vector X are calculated. For the Cartesian coordinates {0, 0},
  1485.                 the polar coordinates are also set to {0, 0}.
  1486. Error handling  none
  1487. Return value    none
  1488. See also        VF_PolartoC,  VF_CtoReIm,  VF_CtoAbs,  VF_CtoArg,  VF_CtoNorm
  1489.  
  1490.  
  1491. ┌────────────────────────────────────────────────────────────────────────────┐
  1492. │ VF_CtoRe                 VD_CtoRe                 VE_CtoRe                 │
  1493. └────────────────────────────────────────────────────────────────────────────┘
  1494. Function        Extracts the real part from a complex vector.
  1495. Syntax          #include <VCFstd.h>
  1496.                 void VF_CtoRe( fVector Re, cfVector X, ui size );
  1497. Description     The real part of the complex vector X is extracted and stored
  1498.                 in Re.
  1499. Error handling  none
  1500. Return value    none
  1501. See also        VF_CtoReIm,  VF_ReImtoC,  VF_RetoC,  VF_PolartoC,  VF_extract
  1502.  
  1503.  
  1504. ┌────────────────────────────────────────────────────────────────────────────┐
  1505. │ VF_CtoReIm               VD_CtoReIm               VE_CtoReIm               │
  1506. └────────────────────────────────────────────────────────────────────────────┘
  1507. Function        Extracts the real and imaginary parts from a complex vector.
  1508. Syntax          #include <VCFstd.h>
  1509.                 void VF_CtoReIm( fVector Re, fVector Im, cfVector X, ui size );
  1510. Description     The real and imaginary parts of the complex vector X are
  1511.                 extracted and stored in Re and Im, resp.
  1512. Error handling  none
  1513. Return value    none
  1514. See also        VF_CtoRe,  VF_ReImtoC,  VF_RetoC,  VF_PolartoC,  VF_extract
  1515.  
  1516.  
  1517. ┌────────────────────────────────────────────────────────────────────────────┐
  1518. │ VF_cubic                 VD_cubic                 VE_cubic                 │
  1519. │ VFx_cubic                VDx_cubic                VEx_cubic                │
  1520. │ VFu_cubic                VDu_cubic                VEu_cubic                │
  1521. │ VFux_cubic               VDux_cubic               VEux_cubic               │
  1522. │ VCF_cubic                VCD_cubic                VCE_cubic                │
  1523. │ VCFx_cubic               VCDx_cubic               VCEx_cubic               │
  1524. └────────────────────────────────────────────────────────────────────────────┘
  1525. Function        Cubic (third power)
  1526. Syntax          #include <VFmath.h>
  1527.                 int  VF_cubic(  fVector  Y,  fVector  X, ui size );
  1528.                 int  VFx_cubic(  fVector  Y,  fVector  X, ui size,
  1529.                                  float A, float B );
  1530.                 int  VFu_cubic(  fVector  Y,  fVector  X, ui size );
  1531.                 int  VFux_cubic( fVector  Y,  fVector  X, ui size,
  1532.                                  float A, float B );
  1533. Description     normal versions:   Yi  =  (Xi)**3
  1534.                 expanded versions: Yi  =  (A*Xi+B)**3
  1535.                 The "unprotected" versions (prefix VFu_ and VFux_) do not
  1536.                 perform any error handling, which makes them very fast;
  1537.                 they should be used very carefully.
  1538. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  1539. Return value    0, if no error occurred, otherwise non-zero
  1540. See also        VF_square,   VF_quartic,  VF_sqrt,  VF_pow,  VF_ipow,  VF_poly
  1541.  
  1542.  
  1543. ┌────────────────────────────────────────────────────────────────────────────┐
  1544. │ VCF_dataPlot             VCD_dataPlot             VCE_dataPlot             │
  1545. └────────────────────────────────────────────────────────────────────────────┘
  1546. Function        Plot of a complex vector into an existing Cartesian complex
  1547.                 plane.
  1548. Syntax          #include <Vgraph.h>
  1549.                 void VCF_dataPlot( cfVector X, ui size,
  1550.                                    unsigned form,  COLORREF color );
  1551. Description     The vector X is plotted into a Cartesian complex plane that
  1552.                 has to be already drawn by a prior call to either
  1553.                 VCF_autoPlot, or VCF_2AutoPlot  or V_drawAxes.
  1554.                 For a description of the parameters form and color, see
  1555.                 VF_xyAutoPlot.
  1556. Error handling  none
  1557. Return value    none
  1558. See also        VCF_autoPlot,  VCF_2AutoPlot, VF_xyAutoPlot,  chapter 4.11
  1559.  
  1560.  
  1561. ┌────────────────────────────────────────────────────────────────────────────┐
  1562. │ VF_deconvolve            VD_deconvolve            VE_deconvolve            │
  1563. └────────────────────────────────────────────────────────────────────────────┘
  1564. Function        Deconvolution
  1565. Syntax          #include <VFstd.h>
  1566.                 void VF_deconvolve( fVector Y, fVector Flt, fVector X,
  1567.                                     fVector Rsp, ui size );
  1568. Description     X is assumed to be the result of a convolution of some "true"
  1569.                 profile with the response function Rsp; a deconvolution is
  1570.                 attempted and stored in Y. A filter Flt is also calculated; if
  1571.                 more than one vector is to be deconvolved with the same Rsp,
  1572.                 use VF_deconvolve only once and use the filter Flt thus
  1573.                 obtained to deconvolve other vectors by calling VF_filter.
  1574.                 The response has to be stored in Rsp in wrap-around order:
  1575.                 the elements for zero and positive times (or whatever the
  1576.                 independent variable is) are stored as Rsp[0]  to Rsp[size/2]
  1577.                 and the elements for negative times as Rsp[size/2+1] to
  1578.                 Rsp[size-1].
  1579.                 You may wish to use VF_rotate or VF_reflect to obtain the
  1580.                 correct order when constructing the response vector.
  1581.  
  1582.                 X, Y, Rsp, and Flt must all be of the same size, which has to
  1583.                 be an integer power of 2.  X may be overwritten by Y, Rsp may
  1584.                 be overwritten by Flt, but X and Flt as well as Y and Rsp
  1585.                 have to be distinct from each other.
  1586.  
  1587.                 Mathematically, Flt is the inverse of the Fourier transform of
  1588.                 Rsp. If the Fourier transform of Rsp contains elements equal
  1589.                 to zero, all information is lost for the respective frequency
  1590.                 and no reconstruction is possible. The best one can do in
  1591.                 this case is to accept this loss and to  deconvolve only up
  1592.                 to those frequencies where still something is left to be
  1593.                 reconstructed.
  1594.                 You are therefore advised not to use this function blindly
  1595.                 but rather to inspect the Fourier transform of Rsp and
  1596.                 decide what to do on the basis of your specific application.
  1597.                 If you wish to use this function nevertheless, you may rely
  1598.                 on the automatic editing of the filter, built into
  1599.                 VF_deconvolve. Thereby, Flt is set to zero (instead of
  1600.                 infinity) at those frequences where all information has
  1601.                 been lost. You may set the threshold for this implicit
  1602.                 editing by VF_setRspEdit. In order to retrieve the threshold
  1603.                 actually set, use VF_getRspEdit.
  1604.  
  1605.                 This deconvolution is based on the implicit assumption that
  1606.                 X is periodic; if this is not the case, see the description
  1607.                 of  VF_convolve  about how to avoid end effects.
  1608.  
  1609.                 About special versions with the prefixes  VFs_  and VFl_,
  1610.                 consult chapter 4.8.
  1611. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_deconvolve
  1612.                 is based) complains "Size must be an integer power of 2" and
  1613.                 the program is aborted.
  1614.                 If, by VF_setRspEdit, you specified Trunc.Re = Trunc.Im = 0,
  1615.                 SING errors may occur that are handled by setting Flt to
  1616.                 ±HUGE_VAL at the respective frequency. During multiplication
  1617.                 with the transform of X, this may lead to unhandled floating-
  1618.                 point overflow errors (in case your guess of Rsp was wrong
  1619.                 and there is some information left at the frequencies where
  1620.                 you thought it was not).
  1621. Return value    none
  1622. See also        VF_filter,  VF_convolve, VF_FFT,  VF_xcorr, VF_spectrum
  1623.  
  1624.  
  1625. ┌────────────────────────────────────────────────────────────────────────────┐
  1626. │ VF_delete                VD_delete                VE_delete                │
  1627. │ VCF_delete               VCD_delete               VCE_delete               │
  1628. │ VI_delete           VSI_delete          VLI_delete          VQI_delete     │
  1629. │ VU_delete           VUS_delete          VUL_delete          VUI_delete     │
  1630. └────────────────────────────────────────────────────────────────────────────┘
  1631. Function        Delete one element from a vector
  1632. Syntax          #include <VFstd.h>
  1633.                 void  VF_delete( fVector X, ui size, ui pos );
  1634. Description     This is one of the few functions where the input vector itself
  1635.                 is changed, instead of being mapped onto an output vector.
  1636.                 The element numbered  pos is deleted from the vector, and all
  1637.                 the following elements are shifted one position lower; the
  1638.                 last element is left undefined.
  1639. Error handling  none
  1640. Return value    none
  1641. See also        VF_rotate, VF_insert
  1642.  
  1643.  
  1644. ┌────────────────────────────────────────────────────────────────────────────┐
  1645. │ VF_derivC                VD_derivC                VE_derivC                │
  1646. └────────────────────────────────────────────────────────────────────────────┘
  1647. Function        Derivative of an array with respect to an independent
  1648.                 variable sampled at constant intervals
  1649. Syntax          #include <VFstd.h>
  1650.                 void  VF_derivC(  fVector Y,  fVector  X,  ui size,
  1651.                                   float DeltaT );
  1652. Description     Y(t) = dX(t) / dt.
  1653.                 The vector X is assumed to be a function of a variable t; the
  1654.                 t values themselves are equally spaced. Therefore, only the
  1655.                 spacing, DeltaT, must be passed to the function. By parabolic
  1656.                 interpolation, the derivative of X with respect to t is
  1657.                 calculated. This function does the inverse of the integration
  1658.                 by  VF_runintegralC.
  1659. Error handling  none
  1660. Return value    none
  1661. See also        VF_derivV,  VF_runintegralC
  1662.  
  1663.  
  1664. ┌────────────────────────────────────────────────────────────────────────────┐
  1665. │ VF_derivV                VD_derivV                VE_derivV                │
  1666. └────────────────────────────────────────────────────────────────────────────┘
  1667. Function        Derivative of one array with respect to another
  1668. Syntax          #include <VFstd.h>
  1669.                 void  VF_derivV(  fVector Z, fVector X,  fVector Y, ui size );
  1670. Description     Z(X)  = dY(X) / dX.
  1671.                 The derivative of  Y with respect to X is calculated by
  1672.                 parabolic interpolation and stored in Z. If the elements of X
  1673.                 are equally-spaced, it is better to use VF_derivC. The inverse
  1674.                 procedure, i.e. integration, is performed by VF_runintegralV.
  1675. Error handling  none
  1676. Return value    none
  1677. See also        VF_derivC,  VF_runintegralV
  1678.  
  1679.  
  1680. ┌────────────────────────────────────────────────────────────────────────────┐
  1681. │ VF_distribution          VD_distribution          VE_distribution          │
  1682. └────────────────────────────────────────────────────────────────────────────┘
  1683. Function        Distribution function
  1684. Syntax          #include <VFstd.h>
  1685.                 ui  VF_distribution(
  1686.                      uiVector Abund, fVector Limits, ui nbins,
  1687.                      fVector X, ui sizex,
  1688.                      int mode );
  1689. Description     This function counts the number of elements of X falling
  1690.                 into each of the intervals defined by Limits. The abundances
  1691.                 thus determined are stored in Abund.
  1692.                 nbins is the number of elements of Limits, i.e. the number
  1693.                 of intervals. sizex is the size of X.
  1694.  
  1695.                 Limits must be in ascending order. The spacing between the
  1696.                 elements of Limits need not necessarily be constant.
  1697.  
  1698.                 The parameter mode specifies how to interpret the values
  1699.                 given in Limits.
  1700.                   mode > 0:  Limits contains the upper limits of the
  1701.                              intervals
  1702.                   mode < 0:  Limits contains the lower limits of the
  1703.                              intervals
  1704.                   mode = 0:  Limits contains the mid-points of the intervals.
  1705.                              An element of X belongs to the element of Limits
  1706.                              closest to it. In case of exactly equal dis-
  1707.                              tances, the interval with the lower index is
  1708.                              chosen.
  1709.                              The interval defined by Limits[0] extends down
  1710.                              to -HUGE_VAL, the interval defined by
  1711.                              Limits[nbins-1] reaches up to +HUGE_VAL.
  1712.  
  1713.                 The number of elements of X not falling into one of the
  1714.                 intervals is returned. For mode > 0, these are the elements
  1715.                 greater than the highest limit. For mode < 0, these are the
  1716.                 elements smaller than the lowest limit.
  1717.                 For mode = 0, the return value is always zero, because
  1718.                 the intervals are open on both sides. So every element
  1719.                 of X is accounted for in Abund.
  1720.  
  1721.                 In order to get the normalized distribution function,
  1722.                 use the sequence
  1723.                      VF_distribution( Abund, Limits, nbins, X, sizex, 0 );
  1724.                      V_UItoD( Y, Abund, nbins );
  1725.                      VD_divC( Y, Y, nbins, VD_integralV(Limits,Y,nbins) );
  1726.  
  1727.                 After that, a call to
  1728.                      VD_runintegralC( Y, Y, nbins, 1.0 );
  1729.                 yields the cumulated distribution function.
  1730. Error handling  none
  1731. Return value    number of elements of X not accounted for in Abund
  1732. See also        VF_searchV
  1733.  
  1734.  
  1735. ┌────────────────────────────────────────────────────────────────────────────┐
  1736. │ VF_divC                  VD_divC                  VE_divC                  │
  1737. │ VCF_divC                 VCD_divC                 VCE_divC                 │
  1738. │ VCF_divReC               VCD_divReC               VCE_divReC               │
  1739. │ VI_divC             VSI_divC            VLI_divC            VQI_divC       │
  1740. │ VU_divC             VUS_divC            VUL_divC            VUI_divC       │
  1741. └────────────────────────────────────────────────────────────────────────────┘
  1742. Function        Divide by a constant
  1743. Syntax          #include <VFmath.h>
  1744.                 void VF_divC( fVector Y, fVector X, ui size, float C );
  1745.                 void  VCF_divC(  cfVector Y,  cfVector X,  ui size,
  1746.                                  fComplex C );
  1747.                 void  VCF_divReC( cfVector Y, cfVector X,  ui size,
  1748.                                   float CRe );
  1749. Description     Yi  =  Xi / C
  1750.                 The integer versions perform an integer division, discarding
  1751.                 the remainder; the remainder itself may be obtained by the
  1752.                 functions of the VI_modC family.
  1753.                 The complex floating-point versions exist in two variants, one
  1754.                 for complex constants C, the other for real-valued constants
  1755.                 CRe by which the complex vector is divided.
  1756. Error handling  none
  1757. Return value    none
  1758. See also        VF_divV,   VF_addC,  VF_subC,  VF_mulC,  VF_divrC,  VF_modC,
  1759.                 VF_visC,  VF_redC
  1760.  
  1761.  
  1762. ┌────────────────────────────────────────────────────────────────────────────┐
  1763. │ VF_divrC                 VD_divrC                 VE_divrC                 │
  1764. │ VCF_divrC                VCD_divrC                VCE_divrC                │
  1765. │ VCF_divrReC              VCD_divrReC              VCE_divrReC              │
  1766. │ VFx_divrC                VDx_divrC                VEx_divrC                │
  1767. │ VCFx_divrC               VCDx_divrC               VCEx_divrC               │
  1768. │ VI_divrC            VSI_divrC           VLI_divrC           VQI_divrC      │
  1769. │ VU_divrC            VUS_divrC           VUL_divrC           VUI_divrC      │
  1770. └────────────────────────────────────────────────────────────────────────────┘
  1771. Function        Reverse division: divide a constant by a vector
  1772. Syntax          #include <VFmath.h>
  1773.                 void  VF_divrC( fVector Y, fVector X, ui size, float C );
  1774.                 void  VFx_divrC( fVector Y, fVector X, ui size,
  1775.                                  float A, float B, float C );
  1776.                 void  VCF_divrC( cfVector Y,  cfVector X,  ui size,
  1777.                                  fComplex C );
  1778.                 void  VCFx_divrC( cfVector Y, cfVector X, ui size,
  1779.                                   fComplex A, fComplex B, fComplex C );
  1780.                 void  VCF_divrReC( cfVector Y, cfVector X,  ui size,
  1781.                                    float CRe );
  1782. Description     normal versions:   Yi  =   C / Xi
  1783.                 expanded versions: Yi  =   C / (A*Xi+B)
  1784.                 The complex floating-point versions exist in two variants, one
  1785.                 for complex constants C, the other for real-valued constants
  1786.                 CRe which are divided by the complex vector.
  1787. Error handling  none;  for the floating-point versions, there are related
  1788.                 functions that calculate  1.0 / Xi   and  1.0 / (A*Xi+B):
  1789.                 VF_inv and VFx_inv, respectively; both of these detect and
  1790.                 handle SING errors.
  1791. Return value    none
  1792. See also        VF_divV,  VF_inv, VF_addC,  VF_subC,  VF_mulC,  VF_divC,
  1793.                 VF_modC, VF_visC,  VF_redC
  1794.  
  1795.  
  1796. ┌────────────────────────────────────────────────────────────────────────────┐
  1797. │ VF_divrV                 VD_divrV                 VE_divrV                 │
  1798. │ VCF_divrV                VCD_divrV                VCE_divrV                │
  1799. │ VCF_divrReV              VCD_divrReV              VCE_divrReV              │
  1800. │ VFx_divrV                VDx_divrV                VEx_divrV                │
  1801. │ VCFx_divrV               VCDx_divrV               VCEx_divrV               │
  1802. │ VCFx_divrReV             VCDx_divrReV             VCEx_divrReV             │
  1803. │ VI_divrV            VSI_divrV           VLI_divrV           VQI_divrV      │
  1804. │ VU_divrV            VUS_divrV           VUL_divrV           VUI_divrV      │
  1805. └────────────────────────────────────────────────────────────────────────────┘
  1806. Function        Divide two vectors in reverse order
  1807. Syntax          #include <VFmath.h>
  1808.                 void  VF_divrV( fVector Z, fVector X, fVector Y, ui size );
  1809.                 void  VFx_divrV( fVector Z,  fVector X, fVector Y,
  1810.                                  ui size, float A,  float  B );
  1811.                 void  VCF_divrV( cfVector Z, cfVector  X, cfVector Y,
  1812.                                  ui size );
  1813.                 void  VCF_divrReV( cfVector Z, cfVector X, fVector Y,
  1814.                                    ui size );
  1815.                 void  VCFx_divrV(  cfVector Z, cfVector X, cfVector Y,
  1816.                                    ui size, fComplex A, fComplex B );
  1817.                 void  VCFx_divrReV( cfVector Z, cfVector X, fVector Y,
  1818.                                     ui size, fComplex A, fComplex B );
  1819. Description     normal versions:   Zi  =   Yi / Xi
  1820.                 expanded versions: Zi  =   Yi / (A*Xi+B)
  1821.                 The complex floating-point versions exist in two variants: in
  1822.                 the first variant (e.g., VCF_divrV,  VCFx_divrV), X, Y, and Z
  1823.                 are all complex; in the second variant, Y is real-valued
  1824.                 (e.g., VCF_divrReV - "division in reverse order: divide a
  1825.                 real vector by a complex one").
  1826. Error handling  none
  1827. Return value    none
  1828. See also        VF_divrC,  VF_addV,  VF_mulV,  VF_modV,  VF_visV,  VF_redV
  1829.  
  1830.  
  1831. ┌────────────────────────────────────────────────────────────────────────────┐
  1832. │ VF_divV                  VD_divV                  VE_divV                  │
  1833. │ VCF_divV                 VCD_divV                 VCE_divV                 │
  1834. │ VCF_divReV               VCD_divReV               VCE_divReV               │
  1835. │ VFs_divV                 VDs_divV                 VEs_divV                 │
  1836. │ VFx_divV                 VDx_divV                 VEx_divV                 │
  1837. │ VCFx_divV                VCDx_divV                VCEx_divV                │
  1838. │ VCFx_divReV              VCDx_divReV              VCEx_divReV              │
  1839. │ VI_divV             VSI_divV            VLI_divV            VQI_divV       │
  1840. │ VU_divV             VUS_divV            VUL_divV            VUI_divV       │
  1841. └────────────────────────────────────────────────────────────────────────────┘
  1842. Function        Divide two vectors
  1843. Syntax          #include <VFmath.h>
  1844.                 void VF_divV( fVector Z, fVector X, fVector Y, ui size );
  1845.                 void VFs_divV( fVector Z, fVector X, fVector Y, ui size,
  1846.                                float C );
  1847.                 void VFx_divV( fVector Z,  fVector X, fVector Y,
  1848.                                ui size, float A,  float  B );
  1849.                 void  VCF_divV( cfVector Z, cfVector  X, cfVector Y,
  1850.                                 ui size );
  1851.                 void  VCF_divReV( cfVector Z, cfVector X, fVector Y,
  1852.                                   ui size );
  1853.                 void  VCFx_divV(  cfVector Z, cfVector X, cfVector Y,
  1854.                                   ui size, fComplex A, fComplex B );
  1855.                 void  VCFx_divReV( cfVector Z, cfVector X, fVector Y,
  1856.                                    ui size, fComplex A, fComplex B );
  1857. Description     normal versions:    Zi  =  Xi / Yi
  1858.                 scaled versions:    Zi  =  C * (Xi / Yi)
  1859.                 expanded versions:  Zi  =  (A*Xi+B) / Yi
  1860.                 The complex floating-point versions exist in two variants: in
  1861.                 the first variant (e.g., VCF_divV,  VCFx_divV),  X, Y, and Z
  1862.                 are all complex; in the second variant, Y is real-valued
  1863.                 (e.g., VCF_divReV - "divide by a real vector").
  1864. Error handling  none
  1865. Return value    none
  1866. See also        VF_divC,  VF_addV,  VF_mulV,  VF_modV,  VF_visV,  VF_redV
  1867.  
  1868.  
  1869. ┌────────────────────────────────────────────────────────────────────────────┐
  1870. │ V_drawAxes                                                                 │
  1871. └────────────────────────────────────────────────────────────────────────────┘
  1872. Function        Draws a Cartesian coordinate system.
  1873. Syntax          #include <Vgraph.h>
  1874.                 void V_drawAxes( long double Xmin, long double Xmax,
  1875.                                  long double Ymin, long double Ymax );
  1876. Description     A Cartesian coordinate system is drawn with the axes scaled
  1877.                 according to the values passed as Xmin, Xmax, Ymin, and Ymax.
  1878.                 Ten subdivision lines are drawn on each axis. No adjustment
  1879.                 of this scaling is performed; if automatic fine-tuning of the
  1880.                 scaling is desired, call V_findAxes instead. Before using this
  1881.                 function, either V_initGraph or V_initPlot has to be called.
  1882.                 V_drawAxes is used internally by all functions of the AutoPlot
  1883.                 family.
  1884. Error handling  none
  1885. Return value    none
  1886. See also        V_findAxes,   V_initPlot,   VF_xyAutoPlot,   VF_xyDataPlot,
  1887.                 chapter 4.11
  1888.  
  1889.  
  1890. ┌────────────────────────────────────────────────────────────────────────────┐
  1891. │ V_DtoF                   V_DtoE                                            │
  1892. └────────────────────────────────────────────────────────────────────────────┘
  1893. Function        Data type conversions.  See V_FtoD.
  1894.  
  1895.  
  1896. ┌────────────────────────────────────────────────────────────────────────────┐
  1897. │ VF_equ0                  VD_equ0                  VE_equ0                  │
  1898. │ VCF_equ0                 VCD_equ0                 VCE_equ0                 │
  1899. │ VI_equ0             VSI_equ0            VLI_equ0            VQI_equ0       │
  1900. │ VU_equ0             VUS_equ0            VUL_equ0            VUI_equ0       │
  1901. └────────────────────────────────────────────────────────────────────────────┘
  1902. Function        (Re-) initialize a vector with zero.
  1903. Syntax          #include <VFstd.h>
  1904.                 void VF_equ0( fVector X, ui size );
  1905. Description     Xi = 0
  1906. Error handling  none
  1907. Return value    none
  1908. See also        VF_equ1, VF_equC, VF_equV
  1909.  
  1910.  
  1911. ┌────────────────────────────────────────────────────────────────────────────┐
  1912. │ VF_equ1                  VD_equ1                  VE_equ1                  │
  1913. │ VCF_equ1                 VCD_equ1                 VCE_equ1                 │
  1914. └────────────────────────────────────────────────────────────────────────────┘
  1915. Function        Initialize a vector with 1.0.
  1916. Syntax          #include <VFstd.h>
  1917.                 void VF_equ1( fVector X,  ui size );
  1918. Description     Xi = 1.0
  1919.                 In the complex versions, the imaginary parts are set to zero.
  1920. Error handling  none
  1921. Return value    none
  1922. See also        VF_equ0, VF_equC, VF_equV
  1923.  
  1924.  
  1925. ┌────────────────────────────────────────────────────────────────────────────┐
  1926. │ VF_equC                  VD_equC                  VE_equC                  │
  1927. │ VCF_equC                 VCD_equC                 VCE_equC                 │
  1928. │ VI_equC             VSI_equC            VLI_equC            VQI_equC       │
  1929. │ VU_equC             VUS_equC            VUL_equC            VUI_equC       │
  1930. └────────────────────────────────────────────────────────────────────────────┘
  1931. Function        Initializes a vector with a constant value.
  1932. Syntax          #include <VFstd.h>
  1933.                 void VF_equC(  fVector X,  ui size, float C );
  1934. Description     Xi = C
  1935. Error handling  none
  1936. Return value    none
  1937. See also        VF_equ0, VF_equ1, VF_equV, VF_comb
  1938.  
  1939.  
  1940.  
  1941. ┌────────────────────────────────────────────────────────────────────────────┐
  1942. │ VF_equV                  VD_equV                  VE_equV                  │
  1943. │ VCF_equV                 VCD_equV                 VCE_equV                 │
  1944. │ VFx_equV                 VDx_equV                 VEx_equV                 │
  1945. │ VCFx_equV                VCDx_equV                VCEx_equV                │
  1946. │ VI_equV             VSI_equV            VLI_equV            VQI_equV       │
  1947. │ VU_equV             VUS_equV            VUL_equV            VUI_equV       │
  1948. └────────────────────────────────────────────────────────────────────────────┘
  1949. Function        Copies one vector to another.
  1950. Syntax          #include <VFstd.h>
  1951.                 void VF_equV(  fVector Y, fVector X, ui size );
  1952.                 void VFx_equV( fVector Y, fVector X,  ui size,
  1953.                                float A,  float B );
  1954. Description     normal versions:     Yi = Xi
  1955.                 expanded versions:   Yi = A * Xi + B
  1956. Error handling  none
  1957. Return value    none
  1958. See also        VF_equ0, VF_equ1, VF_equC,  memcpy, memmove, movmem
  1959.  
  1960.  
  1961. ┌────────────────────────────────────────────────────────────────────────────┐
  1962. │ VF_erf                   VD_erf                   VE_erf                   │
  1963. │ VFx_erf                  VDx_erf                  VEx_erf                  │
  1964. └────────────────────────────────────────────────────────────────────────────┘
  1965. Function        Error function
  1966. Syntax          #include <VFmath.h>
  1967.                 int  VF_erf(   fVector  Y,  fVector  X, ui size );
  1968.                 int  VFx_erf(  fVector  Y,  fVector  X, ui size,
  1969.                                float A, float B, float C );
  1970. Description     normal versions:    Yi  =  erf( Xi )
  1971.                 expanded versions:  Yi  =  C *  erf( A*Xi+B )
  1972. Error handling  this function should be error-proof.
  1973. Return value    always 0
  1974. See also        VF_erfc,  VF_Gauss
  1975.  
  1976.  
  1977. ┌────────────────────────────────────────────────────────────────────────────┐
  1978. │ VF_erfc                  VD_erfc                  VE_erfc                  │
  1979. │ VFx_erfc                 VDx_erfc                 VEx_erfc                 │
  1980. └────────────────────────────────────────────────────────────────────────────┘
  1981. Function        Complementary error function
  1982. Syntax          #include <VFmath.h>
  1983.                 int  VF_erfc(   fVector  Y,  fVector  X, ui size );
  1984.                 int  VFx_erfc(  fVector  Y,  fVector  X, ui size,
  1985.                                 float A, float B, float C );
  1986. Description     normal versions:    Yi  =  1.0 - erf( Xi )
  1987.                 expanded versions:  Yi  =  C *  (1.0 - erf( A*Xi+B ))
  1988. Error handling  this function should be error-proof.
  1989. Return value    always 0
  1990. See also        VF_erf,  VF_Gauss
  1991.  
  1992.  
  1993. ┌────────────────────────────────────────────────────────────────────────────┐
  1994. │ VF_Euclid                VD_Euclid                VE_Euclid                │
  1995. └────────────────────────────────────────────────────────────────────────────┘
  1996. Function        Calculates the Euclidean norm of a vector
  1997. Syntax          #include <VFstd.h>
  1998.                 float VF_Euclid( fVector X, ui size );
  1999. Description     norm  =  sqrt(  sum( Xi² ) )
  2000.                 The Euclidean norm of a vector is defined as the square-root
  2001.                 of the scalar product of the vector with itself.
  2002. Error handling  none  (but beware of a possible overflow!)
  2003. Return value    The Euclidean norm is returned
  2004. See also        VF_ssq, VF_rms, VF_scalprod, VF_xprod
  2005.  
  2006.  
  2007. ┌────────────────────────────────────────────────────────────────────────────┐
  2008. │ VF_exp                   VD_exp                   VE_exp                   │
  2009. │ VCF_exp                  VCD_exp                  VCE_exp                  │
  2010. │ VFx_exp                  VDx_exp                  VEx_exp                  │
  2011. │ VCFx_exp                 VCDx_exp                 VCEx_exp                 │
  2012. └────────────────────────────────────────────────────────────────────────────┘
  2013. Function        Exponential function
  2014. Syntax          #include <VFmath.h>
  2015.                 int  VF_exp(   fVector  Y,  fVector  X, ui size );
  2016.                 int  VFx_exp(  fVector  Y,  fVector  X, ui size,
  2017.                                float A, float B, float C );
  2018. Description     normal versions:    Yi  =  exp( Xi )
  2019.                 expanded versions:  Yi  =  C *  exp( A*Xi+B )
  2020.                 Euler's constant e is raised to the Xi'th power.  Variants of
  2021.                 the exponential function, like its complement (VF_expc), the
  2022.                 hyperbolic functions (e.g. VF_sinh) or the Gaussian
  2023.                 distribution (VF_Gauss) are also available; see chapter 4.6.6
  2024.                 about "Exponentials" before using VF_exp for sums or other
  2025.                 combinations of exponentials - maybe the desired function
  2026.                 already exists.
  2027. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  2028. Return value    0, if no error occurred, otherwise non-zero
  2029. See also        VF_log,  VF_expc, VF_pow,  VF_sinh,  VF_exp2,  VF_Gauss,  exp
  2030.  
  2031.  
  2032. ┌────────────────────────────────────────────────────────────────────────────┐
  2033. │ VF_exp2                  VD_exp2                  VE_exp2                  │
  2034. │ VFx_exp2                 VDx_exp2                 VEx_exp2                 │
  2035. └────────────────────────────────────────────────────────────────────────────┘
  2036. Function        Exponential function to the basis 2
  2037. Syntax          #include <VFmath.h>
  2038.                 int  VF_exp2(   fVector  Y,  fVector  X, ui size );
  2039.                 int  VFx_exp2(  fVector  Y,  fVector  X, ui size,
  2040.                                 float A, float B, float C );
  2041. Description     normal versions:    Yi  =  2 ** Xi
  2042.                 expanded versions:  Yi  =  C *  2 ** ( A*Xi+B )
  2043.                 Two is raised to the Xi'th power. These function names
  2044.                 are used as synonyms for VF_pow2 etc.
  2045. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  2046. Return value    0, if no error occurred, otherwise non-zero
  2047. See also        VF_exp, VF_exp10, VF_ipow2, VF_scale2, VF_log2
  2048.  
  2049.  
  2050. ┌────────────────────────────────────────────────────────────────────────────┐
  2051. │ VF_exp10                 VD_exp10                 VE_exp10                 │
  2052. │ VFx_exp10                VDx_exp10                VEx_exp10                │
  2053. └────────────────────────────────────────────────────────────────────────────┘
  2054. Function        Exponential function to the basis 10
  2055. Syntax          #include <VFmath.h>
  2056.                 int  VF_exp10(   fVector  Y,  fVector  X, ui size );
  2057.                 int  VFx_exp10(  fVector  Y,  fVector  X, ui size,
  2058.                                  float A, float B, float C );
  2059. Description     normal versions:    Yi  =  10 ** Xi
  2060.                 expanded versions:  Yi  =  C *  10 ** ( A*Xi+B )
  2061.                 Ten is raised to the Xi'th power. These function names
  2062.                 are used as synonyms for VF_pow10 etc.
  2063. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  2064. Return value    0, if no error occurred, otherwise non-zero
  2065. See also        VF_exp, VF_exp2, VF_ipow10, VF_scale10, VF_log10
  2066.  
  2067.  
  2068. ┌────────────────────────────────────────────────────────────────────────────┐
  2069. │ VF_expArbBase            VD_expArbBase            VE_expArbBase            │
  2070. │ VCF_expArbBase           VCD_expArbBase           VCE_expArbBase           │
  2071. │ VFx_expArbBase           VDx_expArbBase           VEx_expArbBase           │
  2072. │ VCFx_expArbBase          VCDx_expArbBase          VCEx_expArbBase          │
  2073. └────────────────────────────────────────────────────────────────────────────┘
  2074. Function        Exponential function of an arbitrary base
  2075. Syntax          #include <VFmath.h>
  2076.                 int  VF_expArbBase(   fVector  Y,  fVector  X, ui size,
  2077.                                       float Base );
  2078.                 int  VFx_expArbBase(  fVector  Y,  fVector  X, ui size,
  2079.                                       float Base, float A, float B, float C );
  2080. Description     normal versions:    Yi  =  Base ** Xi
  2081.                 expanded versions:  Yi  =  C *  Base ** ( A*Xi+B )
  2082.                 Base must be positive and non-zero in the real-number
  2083.                 versions. In the complex versions, Base must be non-zero.
  2084. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  2085. Return value    0, if no error occurred, otherwise non-zero
  2086. See also        VF_exp, VF_pow
  2087.  
  2088.  
  2089. ┌────────────────────────────────────────────────────────────────────────────┐
  2090. │ VF_expc                  VD_expc                  VE_expc                  │
  2091. │ VFx_expc                 VDx_expc                 VEx_expc                 │
  2092. └────────────────────────────────────────────────────────────────────────────┘
  2093. Function        Calculate the "complementary exponential function" of each
  2094.                 element of a vector.
  2095. Syntax          #include <VFmath.h>
  2096.                 int  VF_expc(  fVector  Y,  fVector  X, ui size );
  2097.                 int  VFx_expc( fVector  Y,  fVector  X, ui size,
  2098.                                float A, float B, float C );
  2099. Description     normal versions:    Yi  =  1  -  exp( Xi )
  2100.                 expanded versions:  Yi  =  C * (1 - exp [A*Xi + B ])
  2101.                 The difference between 1.0 and the exponential function of Xi
  2102.                 is calculated. Note that the expc function is directly
  2103.                 available from the 80x87 coprocessor in high accuracy; in
  2104.                 fact, it is the exponential function itself that is internally
  2105.                 calculated via the expc function. The expc function is often
  2106.                 encountered in the natural sciences for the description of
  2107.                 decay and growth processes.
  2108. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  2109. Return value    0, if no error occurred, otherwise non-zero.
  2110. See also        VF_log,  VF_exp, VF_pow,  VF_sinh,  VF_exp2,  VF_Gauss,  exp
  2111.  
  2112.  
  2113. ┌────────────────────────────────────────────────────────────────────────────┐
  2114. │ VF_expmx2                VD_expmx2                VE_expmx2                │
  2115. │ VFx_expmx2               VDx_expmx2               VEx_expmx2               │
  2116. └────────────────────────────────────────────────────────────────────────────┘
  2117. Function        Exponential function of the negative square of the argument
  2118. Syntax          #include <VFmath.h>
  2119.                 int  VF_expmx2(  fVector  Y,  fVector  X, ui size );
  2120.                 int  VFx_expmx2( fVector  Y,  fVector  X, ui size,
  2121.                                float A, float B, float C );
  2122. Description     normal versions:     Yi  =  exp( -Xi² )
  2123.                 expanded versions:   Yi  =  C * exp( -(A*Xi+B)² )
  2124.                 This function yields a bell-shaped curve similar to the
  2125.                 Gaussian function.
  2126. Error handling  This function should be error-proof.
  2127. Return value    always 0
  2128. See also        VF_log,  VF_exp,  VF_Gauss,  VF_sech2,  VF_Lorentz,  exp
  2129.  
  2130.  
  2131. ┌────────────────────────────────────────────────────────────────────────────┐
  2132. │ VF_FFT                   VD_FFT                   VE_FFT                   │
  2133. │ VCF_FFT                  VCD_FFT                  VCE_FFT                  │
  2134. └────────────────────────────────────────────────────────────────────────────┘
  2135. Function        Fast Fourier transform
  2136. Syntax          #include <VFstd.h>
  2137.                 void VF_FFT(  fVector Y, fVector X, ui size, int dir );
  2138. Description     The Fourier transform of X is calculated and stored in Y. The
  2139.                 forward transform is obtained by setting dir = 1,  the inverse
  2140.                 (or backward) transform by setting dir = -1.  A Fast Fourier
  2141.                 Transform algorithm is used that requires size to be a power
  2142.                 of 2.
  2143.                 Complex version: Both X and the output Y are complex vectors.
  2144.                 Real version:  For the forward transform, X is a real vector.
  2145.                 The output Y is also defined as fVector, although it consists
  2146.                 of complex numbers. These are packed in a special way such
  2147.                 as to fit into the same amount of memory as the original
  2148.                 real vector X. The order of storage in Y is indicated in the
  2149.                 following table (N=size, U is the uncompressed Fourier
  2150.                 Transform of X):
  2151.  
  2152. ┌─────────┬───────────┬─────────┬─────────┬────────┬────────────┬────────────┐
  2153. │  Y[0]   │   Y[1]    │    Y[2] │   Y[3]  │ .......│   Y[N-2]   │    Y[N-1]  │
  2154. ├─────────┼───────────┼─────────┼─────────┼────────┼────────────┼────────────┤
  2155. │ U[0].Re │ U[N/2].Re │ U[1].Re │ U[1].Im │ .......│ U[N/2-1].Re│ U[N/2-1].Im│
  2156. └─────────┴───────────┴─────────┴─────────┴────────┴────────────┴────────────┘
  2157.                 The reason for this packing is the following. If the size real
  2158.                 data points of X represent a function of the time, X = g(t),
  2159.                 then the forward transform yields a function U = G(f) in the
  2160.                 frequency domain. In principle, U consists of size+1 complex
  2161.                 data points:  size/2 points for positive frequencies, another
  2162.                 size/2 points for negative frequencies, and one point at
  2163.                 frequency zero.
  2164.                 For the Fourier Transform of a real vector, the symmetry
  2165.                 relation G(-f) = │G(f)│*  holds (the asterisc denoting the
  2166.                 complex conjugate). This means that the points at
  2167.                 negative frequencies need not be stored; all information is
  2168.                 already contained in the positive frequency half. Moreover,
  2169.                 the zeroth and the size2'th element of the transform are both
  2170.                 purely real.  Therefore, only these two real and size/2-1
  2171.                 complex data points have to be stored - which exactly fit
  2172.                 into the same amount of memory as the original size real data
  2173.                 points of X. This allows X to be overwritten by its transform,
  2174.                 if desired.
  2175.  
  2176.                 In cases where it is more convenient to obtain the unpacked
  2177.                 complex vector, the following sequence should to be used:
  2178.                    Y = VCF_vector0( size );
  2179.                          /* create Y as a zeroed complex Vector */
  2180.                    VF_RetoC( Y, X, size );
  2181.                          /* Y.Re = X, Y.Im remains zero */
  2182.                    VCF_FFT( Y, Y, size, 1 ) ;       /*  transform Y  */
  2183.  
  2184.                 For the real version of the inverse transform, X has to be a
  2185.                 complex vector packed in the way just described, and a real-
  2186.                 valued vector Y is obtained.
  2187.  
  2188.                 About special versions with the prefixes  VFs_  and VFl_,
  2189.                 consult chapter 4.8.
  2190. Error handling  If size is not a power of 2,  an error message "Size must be
  2191.                 an integer power of 2" is generated and the program aborted.
  2192. Return value    none
  2193. See also        VF_filter, VF_convolve, VF_autocorr, VF_xcorr, VF_spectrum
  2194.  
  2195.  
  2196. ┌────────────────────────────────────────────────────────────────────────────┐
  2197. │ VF_filter                VD_filter                VE_filter                │
  2198. │ VCF_filter               VCD_filter               VCE_filter               │
  2199. └────────────────────────────────────────────────────────────────────────────┘
  2200. Function        Frequency filtering
  2201. Syntax          #include <VFstd.h>
  2202.                 void VF_filter(    fVector Y,  fVector X,
  2203.                                 fVector Flt,  ui size );
  2204. Description     A frequency filter Flt is applied to the vector X. Internally,
  2205.                 this is done by performing a Fourier transform on X,
  2206.                 multiplying the transform with Flt and transforming the
  2207.                 product back into the time domain.
  2208.  
  2209.                 Complex versions: X, Y and the filter Flt are complex vectors.
  2210.                 Real versions:   X and Y are real.  Flt has to be in the
  2211.                 packed complex format that is obtained by Fourier transforming
  2212.                 a real vector with VF_FFT (see that function for the
  2213.                 description of the packed complex format) or by using
  2214.                 VF_convolve.
  2215.  
  2216.                 If X is non-periodic, both ends of the filtered function may
  2217.                 be spoiled by wrap-around. See VF_convolve about how to avoid
  2218.                 end-effects by embedding X in a larger vector or by removing
  2219.                 a possible linear trend.
  2220.                 About special versions with the prefixes  VFs_  and VFl_,
  2221.                 consult chapter 4.8.
  2222. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_filter
  2223.                 is based) complains "Size must be an integer power of 2"
  2224.                 and the program is aborted.
  2225. Return value    none
  2226. See also        VF_FFT, VF_convolve, VF_autocorr, VF_xcorr, VF_spectrum
  2227.  
  2228.  
  2229. ┌────────────────────────────────────────────────────────────────────────────┐
  2230. │ V_findAxes                                                                 │
  2231. └────────────────────────────────────────────────────────────────────────────┘
  2232. Function        Calculate an appropriate scaling and draw a Cartesian
  2233.                 coordinate system.
  2234. Syntax          #include <Vgraph.h>
  2235.                 void V_findAxes( long double Xmin, long double Xmax,
  2236.                                  long double Ymin, long double Ymax );
  2237. Description     This function will rarely be called by the user, but is used
  2238.                 internally in VF_xyAutoPlot and other plotting functions.
  2239.                 According to the x- and y ranges given in the parameters Xmin,
  2240.                 Xmax, Ymin and Ymax, a linear Cartesian coordinate system is
  2241.                 drawn with ten subdivisions both for the  abscissa and the
  2242.                 ordinate. If necessary, the x and y ranges are enlarged so as
  2243.                 to meet the following conditions:
  2244.                 1.  Every subdivision line represents an exact (and not
  2245.                     only a rounded) value.
  2246.                 2.  If the range of one axis or both includes zero, zero
  2247.                     falls exactly on a subdivision line.
  2248.  
  2249.                 If the automatic scaling is not desired, use V_drawAxes
  2250.                 instead.
  2251.                 Before calling V_findAxes, the plotting routines have to be
  2252.                 initialized by either V_initGraph or V_initPlot.
  2253. Error handling  none
  2254. Return value    none
  2255. See also        V_drawAxes, V_initPlot, VF_xyAutoPlot
  2256.  
  2257.  
  2258. ┌────────────────────────────────────────────────────────────────────────────┐
  2259. │ VF_floor                 VD_floor                 VE_floor                 │
  2260. │ VF_floortoI              VD_floortoI              VE_floortoI              │
  2261. │ VF_floortoSI             VD_floortoSI             VE_floortoSI             │
  2262. │ VF_floortoLI             VD_floortoLI             VE_floortoLI             │
  2263. │ VF_floortoQI             VD_floortoQI             VE_floortoQI             │
  2264. │ VF_floortoU              VD_floortoU              VE_floortoU              │
  2265. │ VF_floortoUS             VD_floortoUS             VE_floortoUS             │
  2266. │ VF_floortoUL             VD_floortoUL             VE_floortoUL             │
  2267. │ VF_floortoUI             VD_floortoUI             VE_floortoUI             │
  2268. └────────────────────────────────────────────────────────────────────────────┘
  2269. Function        Rounding towards minus infinity
  2270. Syntax          #include <VFmath.h>
  2271.                 int VF_floor(     fVector Y,   fVector X,  ui size );
  2272.                 int VF_floortoI(  iVector Y,   fVector X,  ui size );
  2273.                 int VF_floortoLI( liVector Y, fVector X,  ui size );
  2274.                 int VF_floortoU(  uVector Y, fVector X,  ui size );
  2275.                      (similarly  all others)
  2276. Description     Each element of X is rounded to the nearest whole number that
  2277.                 is less than or equal to the input number and the result
  2278.                 stored in Y. The functions VF_floortoI, VF_floortoLI,
  2279.                 VF_floortoU, etc. convert the result to the various integer
  2280.                 data types (in the cases mentioned, to the types int,  long
  2281.                 int, or unsigned, respectively).
  2282. Error handling  OVERFLOW errors are handled by setting the result to the
  2283.                 extreme value possible. Negative numbers in the versions
  2284.                 VF_floortoU, VF_floortoUS, VF_floortoUL, and VF_floortoUI
  2285.                 lead to DOMAIN errors; they are handled by setting the result
  2286.                 to 0.
  2287. Return value    0, if no error occurred, otherwise non-zero.
  2288. See also        ceil, floor, VF_round,  VF_ceil, VF_chop, VF_trunc
  2289.  
  2290.  
  2291. ┌────────────────────────────────────────────────────────────────────────────┐
  2292. │ VF_flush0                VD_flush0                VE_flush0                │
  2293. │ VCF_flush0               VCD_flush0               VCE_flush0               │
  2294. └────────────────────────────────────────────────────────────────────────────┘
  2295. Function        Sets vector elements with an absolute value less than a
  2296.                 certain threshold to 0.
  2297. Syntax          #include <VFmath.h>
  2298.                 void  VF_flush0(  fVector Y,  fVector X,  ui size,
  2299.                                   float  AbsMin );
  2300.                 void  VCF_flush0( fVector Y,  fVector X,  ui size,
  2301.                                   fComplex  AbsMin );
  2302. Description     Yi  =  Xi,   if  │ Xi │  >=  AbsMin,
  2303.                 Yi  =  0,    otherwise
  2304.                 The complex versions treat the real and imaginary parts
  2305.                 separately, using the real and imaginary parts of AbsMin to
  2306.                 determine where to cut. If only the imaginary part is to be
  2307.                 edited, set the real part of AbsMin to zero, e.g.:
  2308.                    VCF_flush0( Y, X, size, fcplx( 0, 1.e-6 ));
  2309. Error handling  none
  2310. Return value    none
  2311. See also        VF_limit,  VF_maxC
  2312.  
  2313.  
  2314. ┌────────────────────────────────────────────────────────────────────────────┐
  2315. │ VF_fmodC                 VD_fmodC                 VE_fmodC                 │
  2316. │ VF_fmodV                 VD_fmodV                 VE_fmodV                 │
  2317. │ VFx_fmodV                VDx_fmodV                VEx_fmodV                │
  2318. └────────────────────────────────────────────────────────────────────────────┘
  2319. Function        Floating-point modulo division
  2320. Syntax          #include <VFmath.h>
  2321.                 void VF_fmodC( fVector Y, fVector X, ui size, float C );
  2322.                 void VF_fmodV( fVector Z, fVector X, fVector Y, ui size );
  2323.                 void VFx_fmodV( fVector Z,  fVector X, fVector Y,
  2324.                                 ui size, float A, float B );
  2325. Description     These functions have been included in order to provide
  2326.                 consistency with ANSI C function names. They are implemented
  2327.                 as macros that call VF_modC, VF_modV,  VFx_modV etc.  See
  2328.                 these functions for details.
  2329.  
  2330.  
  2331. ┌────────────────────────────────────────────────────────────────────────────┐
  2332. │ VF_fprint                VD_fprint                VE_fprint                │
  2333. │ VCF_fprint               VCD_fprint               VCE_fprint               │
  2334. │ VI_fprint           VSI_fprint          VLI_fprint          VQI_fprint     │
  2335. │ VU_fprint           VUS_fprint          VUL_fprint          VUI_fprint     │
  2336. └────────────────────────────────────────────────────────────────────────────┘
  2337. Function        print a vector to a stream
  2338. Syntax          #include <VFstd.h>
  2339.                 VF_fprint( FILE *stream, fVector X, ui size,
  2340.                            unsigned nperline, unsigned linewidth );
  2341. Description     size elements of X are written to stream,  nperline in each
  2342.                 line of linewidth characters.
  2343.  
  2344.                 Printing starts always with a new line. This may lead to
  2345.                 an empty line at the beginning. Especially the first line
  2346.                 of a file is reserved for a possible headline.
  2347.  
  2348.                 Each line begins with the index of the first element printed
  2349.                 into that line. The index is followed by a colon and by
  2350.                 the requested nperline elements.
  2351.                 Complex numbers are printed in braces, with the real and
  2352.                 imaginary parts separated by a komma:   {Re, Im}.
  2353.  
  2354.                 In contrast to VF_write and VF_nwrite, it is not possible
  2355.                 to override the automatic choice of the format used for
  2356.                 printing. The number of digits per element is determined
  2357.                 by the available space, which depends in turn on the
  2358.                 parameters nperline and linewidth.
  2359. Error handling  if nperline exceeds the maximum number of entries possible for
  2360.                 the linewidth chosen, an error message "Cannot use requested
  2361.                 format (too many entries per line)!" is generated; in this
  2362.                 case, the program chooses the maximum number nperline
  2363.                 possible.
  2364. Return value    none
  2365. See also        fprintf, VF_cprint, VF_print, VF_write, VF_store
  2366.  
  2367.  
  2368. ┌────────────────────────────────────────────────────────────────────────────┐
  2369. │ V_free                                                                     │
  2370. └────────────────────────────────────────────────────────────────────────────┘
  2371. Function        De-allocate a single vector
  2372. Syntax          #include <VecLib.h>
  2373.                 void  V_free(  void *X );
  2374. Description     The vector X is freed (i.e. de-allocated). V_free  should be
  2375.                 used only for the de-allocation of vectors which have
  2376.                 previously be allocated by one of the functions of the
  2377.                 VF_vector or VF_vector0  family. To free several vectors
  2378.                 simultaneously, use V_nfree.
  2379. Error handling  Trying to free a vector that has already been freed, or that
  2380.                 has never been allocated memory, leads to a warning message
  2381.                 "Cannot free non-existent vector". Program execution is
  2382.                 continued without freeing anything in this case.
  2383. Return value    none
  2384. See also        V_nfree,  V_freeAll, VF_vector,  VF_vector0
  2385.  
  2386.  
  2387. ┌────────────────────────────────────────────────────────────────────────────┐
  2388. │ V_freeAll                                                                  │
  2389. └────────────────────────────────────────────────────────────────────────────┘
  2390. Function        De-allocate all vectors
  2391. Syntax          #include <VecLib.h>
  2392.                 void  V_freeAll(  void );
  2393. Description     All vectors previously be allocated by one of the functions
  2394.                 of the VF_vector or VF_vector0  families are freed.
  2395. Error handling  none
  2396. Return value    none
  2397. See also        V_free,  V_nfree, VF_vector,  VF_vector0
  2398.  
  2399.  
  2400. ┌────────────────────────────────────────────────────────────────────────────┐
  2401. │ VF_frexp                 VD_frexp                VE_frexp                  │
  2402. └────────────────────────────────────────────────────────────────────────────┘
  2403. Function        Split up the elements of a vector into their mantissa and
  2404.                 exponent parts.
  2405. Syntax          #include <VFmath.h>
  2406.                 int  VF_frexp( fVector Mant, iVector Exp, fVector X,
  2407.                                ui size );
  2408. Description     The function is implemented as a macro calling VF_mantexp; the
  2409.                 name VF_frexp is included only to maintain consistency with
  2410.                 the ANSI C function name frexp. For details, see VF_mantexp
  2411.                 and frexp.
  2412.  
  2413.  
  2414. ┌────────────────────────────────────────────────────────────────────────────┐
  2415. │ V_FtoD              V_FtoE              V_CFtoCD            V_CFtoCE       │
  2416. │ V_DtoF              V_DtoE              V_CDtoCF            V_CDtoCE       │
  2417. │ V_EtoF              V_EtoD              V_CEtoCF            V_CEtoCD       │
  2418. └────────────────────────────────────────────────────────────────────────────┘
  2419. Function        Data type interconversions.
  2420. Syntax          #include <VDstd.h>
  2421.                      (always include the <V..std.h>  file of the destination
  2422.                       data-type!)
  2423.                 void V_FtoD(  dVector Y,  fVector X, ui size );
  2424.                      (similarly all other functions of this family)
  2425. Description     Each element of X is converted from the data type specified
  2426.                 for X to the data type specified for Y and stored in Y.
  2427. Error handling  floating-point versions: OVERFLOW errors may occur in the
  2428.                 course of the "down-conversions" (e.g., V_EtoF); by default,
  2429.                 the extreme value possible for the destination data type is
  2430.                 stored in Y with the correct sign. The occurrence of errors
  2431.                 may be excluded by calling VE_limit or VD_limit (whichever
  2432.                 is appropriate) prior to performing the data type conversion.
  2433. Return value    none
  2434. See also        VF_limit, V_ItoF, V_roundtoI, V_roundtoLI
  2435.  
  2436.  
  2437. ┌────────────────────────────────────────────────────────────────────────────┐
  2438. │ VF_Gauss                 VD_Gauss                 VE_Gauss                 │
  2439. └────────────────────────────────────────────────────────────────────────────┘
  2440. Function        Gaussian normal distribution function.
  2441. Syntax          #include <VFmath.h>
  2442.                 int  VF_Gauss( fVector  Y,  fVector  X, ui size,
  2443.                                float Wid,  float Cent, float C );
  2444. Description     Yi   = C / (Wid * sqrt(2*Pi)) * exp( -0.5*((Xi-Cent) / Wid)² )
  2445.                 Wid  =  width of the distribution
  2446.                 Cent =  center of the distribution
  2447.                 C is a scaling factor; for C = 1.0, the distribution is
  2448.                 normalized.
  2449.                 For Wid = 0, the normal distribution is in fact a delta
  2450.                 distribution with Y = C * INF  at X = Cent  and Y = 0 at
  2451.                 all other values of X.
  2452.                 Since infinities are not supported, the existence of a point
  2453.                 X = Cent will lead to a SING error  in case Wid is zero.
  2454. Error handling  SING errors may occur only for a Wid of zero. They are
  2455.                 handled with the default result set to ±HUGE_VAL.
  2456. Return value    0, if no error occurred, otherwise non-zero.
  2457. See also        VF_expmx2,  VF_erf,  VF_sech2,  VF_Lorentz
  2458.  
  2459.  
  2460. ┌────────────────────────────────────────────────────────────────────────────┐
  2461. │ V_getCoordSystem                                                           │
  2462. └────────────────────────────────────────────────────────────────────────────┘
  2463. Function        Store the scalings and position of the current coordinate
  2464.                 system used for VectorLib plotting operations
  2465. Syntax          #include <Vgraph.h>
  2466.                 void V_getCoordSystem( VCOORDSYSTEM *csys );
  2467. Description     If one wants to "hop" between several coordinate systems,
  2468.                 displayed in one and the same window, one has to store the
  2469.                 specifications (position and scalings) of each coordinate
  2470.                 system separately, using this function. 
  2471.                 The address of a struct VCOORDSYSTEM is needed as the
  2472.                 argument. VCOORDSYSTEM is defined in <Vgraph.h>.
  2473. Example         VCOORDSYSTEM csys1;
  2474.                    ....
  2475.                   /* create the first plot:  */
  2476.                 V_setPlotRegion( 0, 0, 339, 200 );
  2477.                 VF_xyAutoPlot( X1, Y1, size1, PS_SOLID, LightGreen );
  2478.                 V_getCoordSystem( &csys1 ); /* store for later */
  2479.                    /* create the second plot: */
  2480.                 V_setPlotRegion( 340, 0, 679, 200 );
  2481.                 VF_xyAutoPlot( X2, Y2, size2, PS_SOLID, LightRed );
  2482.                    /* go back to the first plot: */
  2483.                 VF_setCoordSystem( &csys1 );
  2484.                    /* add an additional DataPlot:  */
  2485.                 VF_xyDataPlot( X1, Z1, size1, PS_SOLID, LightBlue );
  2486. Error handling  none
  2487. Return value    none
  2488. See also        V_setCoordSystem, V_setPlotRegion, V_continuePlot
  2489.  
  2490.  
  2491. ┌────────────────────────────────────────────────────────────────────────────┐
  2492. │ VF_getRspEdit            VD_getRspEdit            VE_getRspEdit            │
  2493. └────────────────────────────────────────────────────────────────────────────┘
  2494. Function        Read the present threshold for the editing of the filter in
  2495.                 VF_convolve and VF_deconvolve
  2496. Syntax          #include <VFstd.h>
  2497.                 fComplex  VF_getRspEdit( void );
  2498. Description     The threshold for the treatment of round-off errors in the
  2499.                 functions for convolution and deconvolution is returned.
  2500. Error handling  none
  2501. Return value    present threshold.
  2502.                 real part:      acts on the real parts of the filter elements
  2503.                 imaginary part: acts on the imaginary parts of the filter
  2504.                                 elements
  2505. See also        VF_setRspEdit,  VF_convolve,  VF_deconvolve
  2506.  
  2507.  
  2508. ┌────────────────────────────────────────────────────────────────────────────┐
  2509. │ VF_Hanning               VD_Hanning               VE_Hanning               │
  2510. └────────────────────────────────────────────────────────────────────────────┘
  2511. Function        "Hanning" window for use in spectral analysis
  2512. Syntax          #include <VFstd.h>
  2513.                 void VF_Hanning( fVector X, ui size );
  2514. Description     Xi = 0.5 * (1 - cos( 2 Pi i / (size-1) ))
  2515. Error handling  none
  2516. Return value    none
  2517. See also        VF_Welch, VF_Parzen, VF_spectrum
  2518.  
  2519.  
  2520. ┌────────────────────────────────────────────────────────────────────────────┐
  2521. │ VF_hypC                  VD_hypC                  VE_hypC                  │
  2522. └────────────────────────────────────────────────────────────────────────────┘
  2523. Function        Quotient of Xi over the sum of Xi and a constant.
  2524. Syntax          #include <VFmath.h>
  2525.                 void VF_hypC( fVector Y, fVector X, ui size, float C );
  2526. Description     Yi  =  hyp( Xi, C )  =  Xi / (Xi + C)
  2527.                 The function calculating Yi according to this formula is
  2528.                 dubbed "hyp" for its formal similarity to the expression
  2529.                 constructing a hyperbola.
  2530. Error handling  none
  2531. Return value    none
  2532. See also        VF_hypV, VF_redC,  VF_addC,  VF_subC,  VF_divC,  VF_visC
  2533.  
  2534.  
  2535. ┌────────────────────────────────────────────────────────────────────────────┐
  2536. │ VF_hypV                  VD_hypV                  VE_hypV,                 │
  2537. │ VFx_hypV                 VDx_hypV                 VEx_hypV                 │
  2538. └────────────────────────────────────────────────────────────────────────────┘
  2539. Function        Quotient of Xi over the sum of Xi and Yi
  2540. Syntax          #include <VFmath.h>
  2541.                 void  VF_hypV( fVector  Z, fVector  X, fVector  Y, ui size );
  2542.                 void  VFx_hypV( fVector  Z,  fVector  X,  fVector  Y,
  2543.                                 ui size, float  A,  float  B );
  2544. Description     normal versions:     Zi = hyp( Xi, Yi ) = Xi / (Xi + Yi)
  2545.                 expanded versions:   Zi = hyp( A*Xi+B), Yi )
  2546. Error handling  none
  2547. Return value    none
  2548. See also        VF_hypC,  VF_redV,  VF_addV,  VF_subV,  VF_divV,  VF_visV
  2549.  
  2550.  
  2551. ┌────────────────────────────────────────────────────────────────────────────┐
  2552. │ VF_hypotC                VD_hypotC                VE_hypotC                │
  2553. └────────────────────────────────────────────────────────────────────────────┘
  2554. Function        Pythagoras "hypotenuse" function.
  2555. Syntax          #include <VFmath.h>
  2556.                 int  VF_hypotC( fVector Y,  fVector X,  ui size, float C );
  2557. Description     Yi =  sqrt( Xi² + C² )
  2558.                 This is a variant of the famous Pythagorean theorem for the
  2559.                 hypotenuse of a right triangle.
  2560. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL. Unlike
  2561.                 the treatment of the ANSI C function hypot by several com-
  2562.                 pilers, only an overflowing final result is regarded as an
  2563.                 error. Intermediate overflows (by the calculation of the
  2564.                 square) are avoided by appropriate scaling.
  2565. Return value    0, if no error occurred;  otherwise non-zero.
  2566. See also        VF_hypotV,  VF_redC,  VF_visC,  VCF_abs, hypot
  2567.  
  2568.  
  2569. ┌────────────────────────────────────────────────────────────────────────────┐
  2570. │ VF_hypotV                VD_hypotV                VE_hypotV                │
  2571. │ VFx_hypotV               VDx_hypotV               VEx_hypotV               │                    │
  2572. └────────────────────────────────────────────────────────────────────────────┘
  2573. Function        Pythagoras "hypotenuse" function.
  2574. Syntax          #include <VFmath.h>
  2575.                 int  VF_hypotV(  fVector Z, fVector X, fVector Y, ui size );
  2576.                 int  VFx_hypotV( fVector Z, fVector X, fVector Y,
  2577.                                  ui size,  float A,  float B );
  2578. Description     normal version:    Yi =  sqrt( Xi² + Yi² )
  2579.                 expanded version:  Yi =  sqrt( (A*Xi+B)² + Yi² )
  2580.                 These are variants of the Pythagoras formula for the
  2581.                 hypotenuse of a right triangle.
  2582. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL.
  2583.                 (Intermediate overflows are avoided by appropriate scaling.)
  2584. Return value    0, if no error occurred;  otherwise non-zero.
  2585. See also        VF_redC,  VF_visC,  VCF_abs, hypot
  2586.  
  2587.  
  2588. ┌────────────────────────────────────────────────────────────────────────────┐
  2589. │ VCF_imag                 VCD_imag                 VCE_imag                 │
  2590. └────────────────────────────────────────────────────────────────────────────┘
  2591. Function        Extracts the imaginary part from a complex vector. Implemented
  2592.                 as a macro that calls VF_CtoIm, VD_CtoIm, VE_CtoIm, resp.  See
  2593.                 these functions for details.
  2594.  
  2595.  
  2596. ┌────────────────────────────────────────────────────────────────────────────┐
  2597. │ VF_ImtoC                 VD_ImtoC                 VE_ImtoC                 │
  2598. └────────────────────────────────────────────────────────────────────────────┘
  2599. Function        Overwrites the imaginary part of a complex vector with a real-
  2600.                 valued vector.
  2601. Syntax          #include <VCFstd.h>
  2602.                 void VF_ImtoC( cfVector Y, fVector Im, ui size );
  2603. Description     The imaginary part of the complex vector Y is overwritten with
  2604.                 the elements of the real-valued vector Im. The real part of Y
  2605.                 is not affected.
  2606. Error handling  none
  2607. Return value    none
  2608. See also        VF_CtoReIm, VF_ReImtoC,  VF_RetoC,  VF_CtoIm, VF_PolartoC
  2609.  
  2610.  
  2611. ┌────────────────────────────────────────────────────────────────────────────┐
  2612. │ VF_indpick               VD_indpick               VE_indpick               │
  2613. │ VCF_indpick              VCD_indpick              VCE_indpick              │
  2614. │ VI_indpick          VSI_indpick         VLI_indpick         VQI_indpick    │
  2615. │ VU_indpick          VUS_indpick         VUL_indpick         VUI_indpick    │
  2616. └────────────────────────────────────────────────────────────────────────────┘
  2617. Function        Fill a vector with elements "picked" from another one
  2618.                 according to their indices.
  2619. Syntax          #include <VFstd.h>
  2620.                 void  VF_indpick( fVector Y, uiVector Ind, ui size,
  2621.                                   fVector X );
  2622. Description     Y[i] = X[ Ind[i] ],               i=0,..size-1
  2623.                 The vector Y is filled with size elements taken from X
  2624.                 according to their indices specified in Ind. The parameter
  2625.                 size refers to Y and Ind. The size of X is unimportant, as
  2626.                 long as the elements specified in Ind exist.
  2627. Error handling  none
  2628. Return value    none
  2629. See also        VF_indput, VF_subvector, VF_sortind
  2630.  
  2631.  
  2632. ┌────────────────────────────────────────────────────────────────────────────┐
  2633. │ VF_indput                VD_indput                VE_indput                │
  2634. │ VCF_indput               VCD_indput               VCE_indput               │
  2635. │ VI_indput           VSI_indput          VLI_indput          VQI_indput     │
  2636. │ VU_indput           VUS_indput          VUL_indput          VUI_indput     │
  2637. └────────────────────────────────────────────────────────────────────────────┘
  2638. Function        Distribute the elements of one vector to the places within
  2639.                 another vector specified by their indices.
  2640. Syntax          #include <VFstd.h>
  2641.                 void  VF_indput( fVector Y, fVector X, uiVector Ind,
  2642.                                  ui sizex );
  2643. Description     Y[ Ind[i] ] = X[i],               i=0,..sizex-1
  2644.                 The sizex elements of X are put into the places of Y accor-
  2645.                 ding to the indices specified in Ind. The parameter
  2646.                 sizex refers to X and Ind. The size of Y is unimportant, as
  2647.                 long as the elements specified in Ind exist.
  2648. Error handling  none
  2649. Return value    none
  2650. See also        VF_indpick, VF_subvector, VF_sortind
  2651.  
  2652.  
  2653. ┌────────────────────────────────────────────────────────────────────────────┐
  2654. │ V_initGraph                                                                │
  2655. └────────────────────────────────────────────────────────────────────────────┘
  2656. Function        Initializes Borland's graphics system and the plotting
  2657.                 functions of the VectorLib library  (DOS only).
  2658. Syntax          #include <Vgraph.h>
  2659.                 void V_initGraph( char *pathtodriver );
  2660. Description     In DOS programs, this function is used to initialize Borland's
  2661.                 graphics system by calling Borland's function initgraph and to
  2662.                 initialize the VectorLib plotting functions (by internally
  2663.                 calling V_initPlot). The search-path for graphics driver
  2664.                 files has to be passed as a pointer to the string pathtodriver
  2665.                 (see initgraph for details). The function uses initgraph to
  2666.                 automatically detect the graphics driver present. This
  2667.                 automatic detection ensures that programs may run on different
  2668.                 PC systems without changes in the source code. If, however, it
  2669.                 causes problems or for other reasons is not desired, do not
  2670.                 use V_initGraph (but first initgraph and then V_initPlot). The
  2671.                 global variable V_gmode is set to the graphics mode with the
  2672.                 highest resolution possible for the detected graphics driver.
  2673.                 If initgraph has already been called, do not use V_initGraph,
  2674.                 but call only V_initPlot. Normally, V_initGraph will be called
  2675.                 at the beginning of a program that uses graphics; to switch
  2676.                 back into text mode within the program, use restorecrtmode.
  2677.                 The next call to one of the AutoPlot functions switches again
  2678.                 into graphics mode. You may also do that yourself by using
  2679.                     setgraphmode( V_gmode );
  2680.                 (to do this, the declaration  external int V_gmode;  has to
  2681.                 appear in the module containing this call).
  2682.  
  2683.                 At the end of the program, free the memory allocated for
  2684.                 graphics operations and go back to the standard mode with
  2685.                 closegraph.
  2686.  
  2687.                 Windows programs do not use the BGI routines. Consequently,
  2688.                 BGI initialization is available only under DOS, but not under
  2689.                 Windows.   V_initPlot has to be used in order to prepare the
  2690.                 VectorLib plotting operations under Windows.
  2691. Error handling  In case of failure, grapherrormsg is called, the appropriate
  2692.                 error message displayed and the program aborted.
  2693. Return value    none
  2694. See also        V_initPlot,  initgraph, closegraph, V_setPlotRegion,
  2695.                 VF_xyAutoPlot, VF_yAutoPlot, VF_xyDataPlot, VCF_autoPlot
  2696.  
  2697.  
  2698. ┌────────────────────────────────────────────────────────────────────────────┐
  2699. │ V_initPlot                                                                 │
  2700. └────────────────────────────────────────────────────────────────────────────┘
  2701. Function        Initialize the global variables used by the plotting functions
  2702. Syntax          #include <Vgraph.h>
  2703.                 #ifdef _Windows
  2704.                     void V_initPlot( HWND vwindow,  HDC  vdc );
  2705.                 #else
  2706.                     void V_initPlot( int graphmode );
  2707.                 #endif
  2708. Description     DOS programs:
  2709.                    If the graphics system has been initialized by a call to
  2710.                    initgraph, V_initPlot is used to initialize the global
  2711.                    constants necessary for the operation of the VectorLib
  2712.                    plotting functions like VF_xyAutoPlot. If the graphics
  2713.                    system is not yet initialized, use V_initGraph to
  2714.                    initialize both the basic graphics system and the plotting
  2715.                    functions; a call to V_initPlot is not necessary then.
  2716.                    graphmode is the graphics mode set by initgraph.
  2717.                 Windows programs:
  2718.                    vwindow is the handle for a window and vdc the handle of a
  2719.                    device context. As long as these handles remain valid,
  2720.                    future plotting operations (like VF_xyAutoPlot) will be
  2721.                    directed to the window specified by vwindow and use the
  2722.                    fonts defined in the device context vdc.  Be sure that
  2723.                    vwindow and vdc are still valid when a plotting operation
  2724.                    is performed; if in doubt, call  V_initPlot again.
  2725.                    If you use OWL, the handle of the actual window is always
  2726.                    available as HWindow.
  2727.                 DOS and Windows:
  2728.                    V_initPlot reserves the rightmost about 2/3 of the screen
  2729.                    for following plotting operations, leaving one line empty
  2730.                    at the top of the screen and a few lines at the bottom.
  2731.                    To override this, call V_setPlotRegion after V_initPlot.
  2732. Error handling  none
  2733. Return value    none
  2734. See also        V_initGraph, VF_xyAutoPlot, V_findAxes, V_drawAxes,
  2735.                 V_setPlotRegion, V_initPrint
  2736.  
  2737.  
  2738. ┌────────────────────────────────────────────────────────────────────────────┐
  2739. │ V_initPrint                                                                │
  2740. └────────────────────────────────────────────────────────────────────────────┘
  2741. Function        Initialize VectorLib plotting functions for use with
  2742.                 a printer. Windows only!
  2743. Syntax          #include <Vgraph.h>
  2744.                 void V_initPrint( HDC  printdc );
  2745. Description     This function exists only for Windows. It tells the VectorLib
  2746.                 plotting functions to send their output to the printer context
  2747.                 specified as printdc. By default, one whole page is reserved
  2748.                 for the printout. To change this, call V_setPlotRegion
  2749.                 after V_initPrint.
  2750.                 To switch back to screen output, call V_initPlot.
  2751. Error handling  none
  2752. Return value    none
  2753. See also        V_initPlot, V_setPlotRegion, VF_xyAutoPlot
  2754.  
  2755.  
  2756. ┌────────────────────────────────────────────────────────────────────────────┐
  2757. │ VF_insert                VD_insert                VE_insert                │
  2758. │ VCF_insert               VCD_insert               VCE_insert               │
  2759. │ VI_insert           VSI_insert          VLI_insert          VQI_insert     │
  2760. │ VU_insert           VUS_insert          VUL_insert          VUI_insert     │
  2761. └────────────────────────────────────────────────────────────────────────────┘
  2762. Function        Insert an element into a vector
  2763. Syntax          #include <VFstd.h>
  2764.                 void VF_insert( fVector X, ui size, ui pos, float C );
  2765. Description     This is one of the few functions where the input vector is
  2766.                 changed itself (instead of being mapped onto an output
  2767.                 vector). A new element is inserted at the position pos and has
  2768.                 the value C. Elements before pos are unchanged, elements from
  2769.                 pos on are shifted one position higher; the last element is
  2770.                 lost. (If you wish to save the last element, choose size big
  2771.                 enough to have a dummy element at the end of the vector; now
  2772.                 it will be the dummy that gets lost.)
  2773. Error handling  none
  2774. Return value    none
  2775. See also        VF_delete, VF_rotate
  2776.  
  2777.  
  2778. ┌────────────────────────────────────────────────────────────────────────────┐
  2779. │ VF_integralC             VD_integralC             VE_integralC             │
  2780. └────────────────────────────────────────────────────────────────────────────┘
  2781. Function        Integral of an array plotted over an equally-spaced abscissa.
  2782. Syntax          #include <VFstd.h>
  2783.                 float  VF_integralC( fVector X, ui size,
  2784.                                      float DeltaT );
  2785. Description     The vector X is assumed to be a function of a variable t; the
  2786.                 t values themselves are equally spaced, so that only the
  2787.                 spacing DeltaT is needed. The area under X, i.e. the integral
  2788.                 of X over t from t[0] to t[size-1] is calculated. If not only
  2789.                 the value of the integral is of interest, but a point-by-point
  2790.                 integration has to be performed, VF_runintegralC should be
  2791.                 used.
  2792. Error handling  none
  2793. Return value    The value of the integral is returned.
  2794. See also        VF_integralV,  VF_runintegralC,  VF_derivC
  2795.  
  2796.  
  2797. ┌────────────────────────────────────────────────────────────────────────────┐
  2798. │ VF_integralV             VD_integralV             VE_integralV             │
  2799. └────────────────────────────────────────────────────────────────────────────┘
  2800. Function        Integral
  2801. Syntax          #include <VFstd.h>
  2802.                 float  VF_integralV( fVector X, fVector Y, ui size );
  2803. Description     The vector Y is assumed to be a function of X; the integral of
  2804.                 Y over X is calculated. If the elements of X are regularly
  2805.                 spaced with a constant difference between them, the integral
  2806.                 is obtained more efficiently by VF_integralC. If not only the
  2807.                 value of the integral is of interest, but a point-by-point
  2808.                 integration has to be performed, VF_runintegralV may be used.
  2809. Error handling  none
  2810. Return value    The value of the integral is returned.
  2811. See also        VF_integralC,  VF_runintegralV,  VF_derivV
  2812.  
  2813.  
  2814. ┌────────────────────────────────────────────────────────────────────────────┐
  2815. │ VF_intfrac               VD_intfrac               VE_intfrac               │
  2816. └────────────────────────────────────────────────────────────────────────────┘
  2817. Function        Split up the elements of a vector into their integer and
  2818.                 fractional parts.
  2819. Syntax          #include <VFmath.h>
  2820.                 int  VF_intfrac( fVector IntPart, fVector FracPart,
  2821.                                  fVector X, ui size );
  2822. Description     The integer parts of the elements of X are stored in IntPart,
  2823.                 the fractional parts in FracPart. Notice that IntPart is a
  2824.                 floating-point vector, even though it contains integer numbers
  2825.                 (which might be larger than could be stored in the integer
  2826.                 data types).
  2827. Error handling  none
  2828. Return value    always 0
  2829. See also        modf,  VF_mantexp
  2830.  
  2831.  
  2832. ┌────────────────────────────────────────────────────────────────────────────┐
  2833. │ VF_inv                   VD_inv                   VE_inv                   │
  2834. │ VFx_inv                  VDx_inv                  VEx_inv                  │
  2835. │ VCF_inv                  VCD_inv                  VCE_inv                  │
  2836. │ VCFx_inv                 VCDx_inv                 VCEx_inv                 │
  2837. └────────────────────────────────────────────────────────────────────────────┘
  2838. Function        Inverse
  2839. Syntax          #include <VFmath.h>
  2840.                 int  VF_inv(  fVector Y,  fVector  X,  ui size );
  2841.                 int  VFx_inv( fVector Y,  fVector  X,  ui size,
  2842.                               float A,  float B );
  2843. Description     normal versions:   Yi = 1.0 / Xi
  2844.                 expanded versions: Yi = 1.0 / (A*Xi+B)
  2845. Error handling  Division by zero is treated as a SING error with the default
  2846.                 result set to HUGE_VAL. In the expanded versions, OVERFLOW
  2847.                 errors may also occur; the default result is set to ±HUGE_VAL.
  2848. Return value    0, if no error occurred;  otherwise non-zero.
  2849. See also        VF_divrC,  VF_divrV
  2850.  
  2851.  
  2852. ┌────────────────────────────────────────────────────────────────────────────┐
  2853. │ VF_ipow                  VD_ipow                  VE_ipow                  │
  2854. │ VFx_ipow                 VDx_ipow                 VEx_ipow                 │
  2855. │ VFu_ipow                 VDu_ipow                 VEu_ipow                 │
  2856. │ VFux_ipow                VDux_ipow                VEux_ipow                │
  2857. │ VCF_ipow                 VCD_ipow                 VCE_ipow                 │
  2858. │ VCFx_ipow                VCDx_ipow                VCEx_ipow                │
  2859. └────────────────────────────────────────────────────────────────────────────┘
  2860. Function        Raise each element of a vector to a specified integer power.
  2861. Syntax          #include <VFmath.h>
  2862.                 int VF_ipow( fVector Y, fVector X, ui size, int Expo );
  2863.                 int VFx_ipow( fVector Y, fVector X, ui size, int Expo,
  2864.                               float A, float B, float C );
  2865.                 int VFu_ipow( fVector Y, fVector X, ui size, int Expo );
  2866.                 int VFux_ipow( fVector Y, fVector X, ui size, int Expo,
  2867.                                float A, float B, float C );
  2868. Description     normal versions:   Yi = Xi**Expo
  2869.                 expanded versions: Yi = C * (A*Xi+B)**Expo
  2870.                 If Expo is larger than a data-type dependent threshold (which
  2871.                 will be a very rare occasion), VF_ipow does not calculate the
  2872.                 result itself, but calls VF_pow,  which is safer and faster in
  2873.                 this case.
  2874.                 The "unprotected" versions (prefix VFu_ and VFux_) do not
  2875.                 perform any error handling and do not redirect calls to VF_pow.
  2876.                 These simplifications make them very fast, but also risky;
  2877.                 they should be used very carefully.
  2878. Error handling  SING errors occur, if zero is raised to a negative power; the
  2879.                 default result is ±HUGE_VAL, as in the case of OVERFLOW
  2880.                 errors.
  2881. Return value    0, if no error occurred, otherwise non-zero
  2882. See also        VF_pow,  VF_poly,  VF_pow2,  VF_exp,  pow
  2883.  
  2884.  
  2885. ┌────────────────────────────────────────────────────────────────────────────┐
  2886. │ VF_ipow10                VD_ipow10                VE_ipow10                │
  2887. └────────────────────────────────────────────────────────────────────────────┘
  2888. Function        Integer powers of 10
  2889. Syntax          #include <VFmath.h>
  2890.                 int  VF_ipow10(  fVector Y, iVector X, ui size );
  2891. Description     Yi  =  10**Xi
  2892.                 Notice: this function (and not VF_pow10 !) is the vectorized
  2893.                 form of the function pow10 defined in Borland C/C++.
  2894. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL.
  2895. Return value    0, if no error occurred, otherwise non-zero
  2896. See also        VF_pow10,  VF_scale10,  VF_log10,  VF_ipow,  VF_exp,  pow
  2897.  
  2898.  
  2899. ┌────────────────────────────────────────────────────────────────────────────┐
  2900. │ VF_ipow2                 VD_ipow2                 VE_ipow2                 │
  2901. └────────────────────────────────────────────────────────────────────────────┘
  2902. Function        Integer powers of 2
  2903. Syntax          #include <VFmath.h>
  2904.                 int  VF_ipow2(  fVector Y,  iVector X, ui size );
  2905. Description     Yi  =  2**Xi
  2906. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL.
  2907. Return value    0, if no error occurred, otherwise non-zero
  2908. See also        VF_pow2,  VF_scale2,  VF_log2,  VF_pow,  VF_exp,  pow
  2909.  
  2910.  
  2911. ┌────────────────────────────────────────────────────────────────────────────┐
  2912. │ VF_iselementC            VD_iselementC            VE_iselementC            │
  2913. │ VCF_iselementC           VCD_iselementC           VCE_iselementC           │
  2914. │ VI_iselementC       VSI_iselementC      VLI_iselementC      VQI_iselementC │
  2915. │ VU_iselementC       VUS_iselementC      VUL_iselementC      VUI_iselementC │
  2916. └────────────────────────────────────────────────────────────────────────────┘
  2917. Function        Test if one or more elements of a table are equal to C.
  2918. Syntax          #include <VFstd.h>
  2919.                 int  VF_iselementC( fVector Tab, ui size, float C );
  2920. Description     The vector Tab is searched for the value C. If one or more
  2921.                 elements are equal to C, TRUE (+1) is returned, otherwise
  2922.                 FALSE (0). No ordering of Tab is assumed and a linear search
  2923.                 performed. A related function that finds the table element
  2924.                 closest (but not necessarily equal) to C is VF_searchC.
  2925. Error handling  none
  2926. Return value    +1, if C  is an element of X, otherwise 0.
  2927. See also        VF_searchC, VF_iselementV, lfind, lsearch
  2928.  
  2929.  
  2930. ┌────────────────────────────────────────────────────────────────────────────┐
  2931. │ VF_iselementV            VD_iselementV            VE_iselementV            │
  2932. │ VCF_iselementV           VCD_iselementV           VCE_iselementV           │
  2933. │ VI_iselementV       VSI_iselementV      VLI_iselementV      VQI_iselementV │
  2934. │ VU_iselementV       VUS_iselementV      VUL_iselementV      VUI_iselementV │
  2935. └────────────────────────────────────────────────────────────────────────────┘
  2936. Function        Test for each element of a vector, if an identical element is
  2937.                 present in a table.
  2938. Syntax          #include <VFstd.h>
  2939.                 ui  VF_iselementV(  fVector Y,  fVector X,  ui sizex,
  2940.                                     fVector Tab, ui sizetab );
  2941. Description     The table Tab is searched for each of the elements of X. For
  2942.                 those elements of X which are found in Tab, the corresponding
  2943.                 element of Y is set to +1 (in the complex versions: {1, 0} ).
  2944.                 No ordering of X and Tab is assumed and a linear search for
  2945.                 each Xi performed. A related function that finds the table
  2946.                 element closest (but not necessarily equal) to each element of
  2947.                 X  is VF_searchV.
  2948. Error handling  none
  2949. Return value    The number of elements of X for which an element of Tab was
  2950.                 found is returned.
  2951. See also        VF_searchV, VF_iselementC
  2952.  
  2953.  
  2954. ┌────────────────────────────────────────────────────────────────────────────┐
  2955. │ VF_ismonoton             VD_ismonoton             VE_ismonoton             │
  2956. └────────────────────────────────────────────────────────────────────────────┘
  2957. Function        Test if the elements of a vector are monotonously increasing
  2958.                 or decreasing
  2959. Syntax          #include <VFstd.h>
  2960.                 int  VF_ismonoton( fVector X,  ui size );
  2961. Description     The vector X is analyzed. If the elements are in strict
  2962.                 descending order, -1 is returned; if they are either constant
  2963.                 or in strict ascending order, +1 is returned. Otherwise the
  2964.                 return value is 0. If X contains passages that are increasing
  2965.                 as well as passages that remain at a constant value, X is
  2966.                 regarded as monotonous only if the increasing passage follows
  2967.                 the constant passage, but not the other way round. Thus, the
  2968.                 series 0, 0, 0, 1, 2, 3 will be accepted as monotonous (return
  2969.                 value +1), whereas the series 1, 2, 3, 4, 4, 4 will not
  2970.                 (return value 0). Also the initially constant, then falling
  2971.                 series 0, 0, 0, -1, -2, -3 will not be regarded as monotonous.
  2972. Error handling  none
  2973. Return value    +1 in case of monotonous rise, or if all elements are
  2974.                 identical, -1 in case of monotonously falling values,  0 if
  2975.                 neither of these conditions is fulfilled.
  2976. See also        VF_sort
  2977.  
  2978.  
  2979. ┌────────────────────────────────────────────────────────────────────────────┐
  2980. │ V_ItoF                   V_ItoD                   V_ItoE                   │
  2981. │ V_SItoF                  V_SItoD                  V_SItoE                  │
  2982. │ V_LItoF                  V_LItoD                  V_LItoE                  │
  2983. │ V_QItoF                  V_QItoD                  V_QItoE                  │
  2984. │ V_UtoF                   V_UtoD                   V_UtoE                   │
  2985. │ V_UStoF                  V_UStoD                  V_UStoE                  │
  2986. │ V_ULtoF                  V_ULtoD                  V_ULtoE                  │
  2987. │ V_UItoF                  V_UItoD                  V_UItoE                  │
  2988. └────────────────────────────────────────────────────────────────────────────┘
  2989. Function        Convert integer numbers into floating-point data types.
  2990. Syntax          #include <VFstd.h>
  2991.                   (always the include-file belonging to the destination type!)
  2992.                 void V_ItoF( fVector Y, iVector X, ui size );
  2993.                     (all other functions of this family are similar)
  2994. Description     Each element of X is converted from the data type int, short
  2995.                 int, long int, quad, unsigned, unsigned short, unsigned long,
  2996.                 or ui, resp., into the data type float, double, or extended,
  2997.                 resp., and stored in Y. For the inverse procedure, i.e. the
  2998.                 conversion of floating-point numbers to integers, the
  2999.                 functions of the VF_roundtoI,  VF_floortoI,  VF_ceiltoI,  and
  3000.                 VF_choptoI families have to be used.
  3001. Error handling  none
  3002. Return value    none
  3003. See also        VF_roundtoI,  VF_floortoI,  VF_ceiltoI,  VF_choptoI,
  3004.                 VF_trunctoI,  V_ItoLI
  3005.  
  3006.  
  3007. ┌────────────────────────────────────────────────────────────────────────────┐
  3008. │ V_ItoSI                  V_ItoLI                  V_ItoQI                  │
  3009. │ V_SItoI                  V_SItoLI                 V_SItoQI                 │
  3010. │ V_LItoSI                 V_LItoI                  V_LItoQI                 │
  3011. │ V_QItoSI                 V_QItoI                  V_QItoLI                 │
  3012. │ V_UtoUS                  V_UtoUL                  V_UtoUI                  │
  3013. │ V_UStoU                  V_UStoUL                 V_UStoUI                 │
  3014. │ V_ULtoU                  V_ULtoUS                 V_ULtoUI                 │
  3015. │ V_UItoU                  V_UItoUS                 V_UItoUL                 │
  3016. │ V_ItoU                   V_SItoUS                 V_LItoUL                 │
  3017. │ V_UtoI                   V_UStoSI                 V_ULtoLI                 │
  3018. └────────────────────────────────────────────────────────────────────────────┘
  3019. Function        Interconversion of the integer data types
  3020. Syntax          #include <VLIstd.h>
  3021.                    (or <VIstd.h>,  <VUstd.h>,..., resp., depending on the
  3022.                     destination data type!)
  3023.                 void V_ItoLI( liVector Y,  iVector X, ui size );
  3024.                     (all other functions of this family are similar)
  3025. Description     Each element of the vector X is converted into the desired
  3026.                 data type and stored in Y.
  3027. Error handling  see chapter 5.2.
  3028. Return value    none
  3029. See also        V_ItoF
  3030.  
  3031.  
  3032. ┌────────────────────────────────────────────────────────────────────────────┐
  3033. │ VF_Kepler                VD_Kepler                VE_Kepler                │
  3034. │ VFx_Kepler               VDx_Kepler               VEx_Kepler               │
  3035. └────────────────────────────────────────────────────────────────────────────┘
  3036. Function        Angular position of a planet according to Kepler's Second Law
  3037. Syntax          #include <VFmath.h>
  3038.                 int VF_Kepler( fVector Y, fVector X, ui size,
  3039.                                float T, float e );
  3040.                 int VFx_Kepler( fVector Y, fVector X, ui size, 
  3041.                                 float T, float e, float A, float B );
  3042. Description     normal versions:   Yi = Kepler( Xi/T, e );
  3043.                 expanded versions: Yi = Kepler( (A*Xi+B)/T, e );
  3044.  
  3045.                 The time-dependent angular position of a planet is calculated
  3046.                 from its round-trip time T and its eccentricity e.
  3047.                 T must be non-zero; e may take on values 0 <= e <= 1.
  3048.                 While there is no analytic solution to this problem,
  3049.                 described by Johannes Kepler's Second Law, a very efficient
  3050.                 iterative algorithm is used here. This algorithm is fast
  3051.                 and stable up to the hyperbolic limit, e = 1.0.
  3052.                 Rather than treating the problem in terms of the reduced time
  3053.                 m = t/T  (like it is done in Astronomy textbooks), VF_Kepler
  3054.                 expects the real times in X and divides them internally by T.
  3055.  
  3056.                 As there are very few occasions when one might wish to
  3057.                 scale the obtained angular position by a constant, no multi-
  3058.                 plication by C is included in the VFx_ version which,
  3059.                 consequently, has only A and B as additional parameters
  3060.                 (unlike most of the other "expanded versions" of VectorLib
  3061.                 math functions).
  3062.  
  3063. Error handling  e negative or e greater than 1.0 leads to an
  3064.                 "Invalid parameter(s)" error. T = 0 leads to all Yi = 0.
  3065. Return value    0, if no error occurred, otherwise non-zero
  3066.  
  3067.  
  3068. ┌────────────────────────────────────────────────────────────────────────────┐
  3069. │ VF_ldexp                 VD_ldexp                 VE_ldexp                 │
  3070. └────────────────────────────────────────────────────────────────────────────┘
  3071. Function        Scale by an integer power of 2.
  3072. Syntax          #include <VFmath.h>
  3073.                 int  VF_ldexp( fVector Y, fVector X, ui size, int expo );
  3074. Description     These functions are implemented as alias names for VF_scale2
  3075.                 etc., in order to maintain consistency with the ANSI C
  3076.                 function name ldexp. For details, see VF_scale2.
  3077.  
  3078.  
  3079. ┌────────────────────────────────────────────────────────────────────────────┐
  3080. │ VF_limit                 VD_limit                 VE_limit                 │
  3081. │ VCF_limit                VCD_limit                VCE_limit                │
  3082. └────────────────────────────────────────────────────────────────────────────┘
  3083. Function        Limit the values of the elements of a vector to a specified
  3084.                 range.
  3085. Syntax          #include <VFmath.h>
  3086.                 void  VF_limit( fVector Y,  fVector X,  ui size,
  3087.                                 float  Min,  float  Max );
  3088.                 void  VCF_limit( cfVector Y,  cfVector X,  ui size,
  3089.                                  fComplex  Min,  fComplex  Max );
  3090. Description     Real version:
  3091.                     Yi  =  Xi ,   if  Min <=  Xi  <=  Max
  3092.                     Yi  =  Max,   if  Xi  >   Max
  3093.                     Yi  =  Min,   if  Xi  <   Min
  3094.                     This function may be seen as a combination of VF_maxC
  3095.                     and VF_minC.
  3096.                 Complex version:
  3097.                     Similar to the real version, but the real and imaginary
  3098.                     parts are limited separately to the ranges specified in
  3099.                     the respective parts of Min and Max.
  3100. Error handling  none
  3101. Return value    none
  3102. See also        VF_maxC,   VF_minC,  VF_min,  VF_flush0
  3103.  
  3104.  
  3105. ┌────────────────────────────────────────────────────────────────────────────┐
  3106. │ VF_linregress            VD_linregress            VE_linregress            │
  3107. └────────────────────────────────────────────────────────────────────────────┘
  3108. Function        Linear regression
  3109. Syntax          #include <VFstd.h>
  3110.                 void  VF_linregress( fVector Param,  fVector X,
  3111.                                      fVector Y, ui size );
  3112. Description     The X-Y data are fitted to a straight line  y = ax + b;  the
  3113.                 parameters a and b are determined in such a way that the
  3114.                 quantity
  3115.                   h² = sum( (Yi - y(x=Xi) )² )
  3116.                 is minimized. Uncertainties da and db are also determined. On
  3117.                 output, Param is filled with the 5 elements {a, da, b, db, h²}
  3118.                 in the order indicated.
  3119. Error handling  none
  3120. Return value    none
  3121. See also        VF_linregresswW, VF_corrcoeff,  VF_chi2
  3122.  
  3123.  
  3124. ┌────────────────────────────────────────────────────────────────────────────┐
  3125. │ VF_lincomb               VD_lincomb               VE_lincomb               │
  3126. │ VCF_lincomb              VCD_lincomb              VCE_lincomb              │
  3127. └────────────────────────────────────────────────────────────────────────────┘
  3128. Function        linear combination of two vectors
  3129. Syntax          #include <VFstd.h>
  3130.                 void  VF_lincomb( fVector Z, fVector X, fVector Y, ui size,
  3131.                                   float  CX, float  CY );
  3132. Descirption     Zi = CX * Xi  +  CY * Yi
  3133. Error handling  none
  3134. Return value    none
  3135. See also        VFx_addV
  3136.  
  3137.  
  3138. ┌────────────────────────────────────────────────────────────────────────────┐
  3139. │ VF_linregresswW          VD_linregresswW          VE_linregresswW          │
  3140. └────────────────────────────────────────────────────────────────────────────┘
  3141. Function        Linear regression with weights
  3142. Syntax          #include <VFstd.h>
  3143.                 void  VF_linregresswW( fVector Param, fVector X,
  3144.                                        fVector Y, fVector InvVar, ui size );
  3145. Description     The X-Y data are weighted with the inverse of their variances
  3146.                 and fitted to a straight line  y = ax + b; the parameters a
  3147.                 and b are determined in such a way as to minimize the merit
  3148.                 function
  3149.                   chi²  =  sum(  (1 / Var[i]) * (Yi - y(x=Xi) )² )
  3150.                 (see also VF_chi2). The inverse of the variance of each data
  3151.                 point has to be passed to the function in the vector InvVar.
  3152.                 Uncertainties da and db are also  determined. On output,
  3153.                 Param is filled with the 5 elements {a, da, b, db, chi²} in
  3154.                 the order indicated.
  3155. Error handling  none
  3156. Return value    none
  3157. See also        VF_linregress, VF_corrcoeff,  VF_chi2
  3158.  
  3159.  
  3160. ┌────────────────────────────────────────────────────────────────────────────┐
  3161. │ V_LItoF                  V_LItoD                  V_LItoE                  │
  3162. └────────────────────────────────────────────────────────────────────────────┘
  3163. Function        Data type interconversions.  See V_ItoF!
  3164.  
  3165.  
  3166. ┌────────────────────────────────────────────────────────────────────────────┐
  3167. │ VF_ln                    VD_ln                    VE_ln                    │
  3168. │ VCF_ln                   VCD_ln                   VCE_ln                   │
  3169. │ VFx_ln                   VDx_ln                   VEx_ln                   │
  3170. │ VCFx_ln                  VCDx_ln                  VCEx_ln                  │
  3171. └────────────────────────────────────────────────────────────────────────────┘
  3172. Function        Natural logarithm
  3173. Syntax          #include <VFmath.h>
  3174.                 int  VF_ln(  fVector  Y,  fVector  X, ui size );
  3175.                 int  VFx_ln( fVector  Y,  fVector  X, ui size,
  3176.                              float A, float B, float C );
  3177. Description     These function names are synonyms for the functions of the
  3178.                 VF_log family. See VF_log for details.
  3179.  
  3180.  
  3181. ┌────────────────────────────────────────────────────────────────────────────┐
  3182. │ VF_localmaxima           VD_localmaxima           VE_localmaxima           │
  3183. └────────────────────────────────────────────────────────────────────────────┘
  3184. Function        Find the indices of local maxima
  3185. Syntax          #include <VFstd.h>
  3186.                 ui VF_localmaxima( uiVector Ind, fVector X,  ui size );
  3187. Description     The indices of local maxima in X are stored in Ind and the
  3188.                 number of local maxima is returned (this is the number of
  3189.                 elements of Ind). A local maximum is defined as one element
  3190.                 of X that is greater than both its neighbours to the right
  3191.                 and to the left. That means that the zeroth and the last
  3192.                 element of X (which have only one neighbour) cannot be local
  3193.                 maxima. Also, if two adjacent elements are equal, none of
  3194.                 them can be a local maximum.
  3195. Error handling  none
  3196. Return value    number of local maxima found
  3197. See also        VF_maxind, VF_max, VF_indpick, VF_localminima
  3198.  
  3199.  
  3200. ┌────────────────────────────────────────────────────────────────────────────┐
  3201. │ VF_localminima           VD_localminima           VE_localminima           │
  3202. └────────────────────────────────────────────────────────────────────────────┘
  3203. Function        Find the indices of local minima
  3204. Syntax          #include <VFstd.h>
  3205.                 ui VF_localminima( uiVector Ind, fVector X,  ui size );
  3206. Description     The indices of local minima in X are stored in Ind and the
  3207.                 number of local minima is returned (this is the number of
  3208.                 elements of Ind). A local minimum is defined as one element of
  3209.                 X that is smaller than both its neighbours to the right and to
  3210.                 the left. That means that the zeroth and the last element of X
  3211.                 (which have only one neighbour) cannot be local minima. Also,
  3212.                 if two adjacent elements are equal, none of them can be a
  3213.                 local minimum.
  3214. Error handling  none
  3215. Return value    number of local minima found
  3216. See also        VF_minind, VF_min, VF_indpick, VF_localmaxima
  3217.  
  3218.  
  3219. ┌────────────────────────────────────────────────────────────────────────────┐
  3220. │ VF_log                   VD_log                   VE_log                   │
  3221. │ VCF_log                  VCD_log                  VCE_log                  │
  3222. │ VFx_log                  VDx_log                  VEx_log                  │
  3223. │ VCFx_log                 VCDx_log                 VCEx_log                 │
  3224. └────────────────────────────────────────────────────────────────────────────┘
  3225. Function        Natural logarithm
  3226. Syntax          #include <VFmath.h>
  3227.                 int  VF_log(  fVector  Y,  fVector  X, ui size );
  3228.                 int  VFx_log( fVector  Y,  fVector  X, ui size,
  3229.                               float A, float B, float C );
  3230. Description     normal versions:    Yi = ln( Xi )
  3231.                 expanded versions:  Yi = C * ln( A*Xi+B )
  3232.                 The "logarithmus naturalis", i.e. the logarithm to the basis
  3233.                 of Euler's constant  e  is calculated.
  3234. Error handling  Real versions: DOMAIN errors occur in the case of negative Xi
  3235.                 (including -0.0), with NAN ("not-a-number") as the default
  3236.                 result. SING errors occur for Xi= +0.0 and yield a result of
  3237.                 -HUGE_VAL. In the complex version, numbers with an imaginary
  3238.                 part of zero are always treated as real numbers; therefore,
  3239.                 an argument {0, 0} is treated as a real 0, causing a SING
  3240.                 error with the default result {-HUGE_VAL,  0}.
  3241. Return value    0, if no error occurred, otherwise non-zero
  3242. See also        VF_exp,  VF_log2,  VF_log10, VF_pow,  log
  3243.  
  3244.  
  3245. ┌────────────────────────────────────────────────────────────────────────────┐
  3246. │ VF_log10                   VD_log10                   VE_log10             │
  3247. │ VCF_log10                  VCD_log10                  VCE_log10            │
  3248. │ VFx_log10                  VDx_log10                  VEx_log10            │
  3249. │ VCFx_log10                 VCDx_log10                 VCEx_log10           │
  3250. └────────────────────────────────────────────────────────────────────────────┘
  3251. Function        Decadic logarithm
  3252. Syntax          #include <VFmath.h>
  3253.                 int  VF_log10(  fVector  Y,  fVector  X, ui size );
  3254.                 int  VFx_log10( fVector  Y,  fVector  X, ui size,
  3255.                                 float A, float B, float C );
  3256. Description     normal versions:    Yi = lg( Xi )
  3257.                 expanded versions:  Yi = C * lg( A*Xi+B )
  3258.                 The decadic logarithm (to the basis of 10) is calculated.
  3259. Error handling  Real versions: DOMAIN errors occur in the case of negative Xi
  3260.                 (including -0.0), with NAN ("not-a-number") as the default
  3261.                 result. SING errors occur for Xi= +0.0 and yield a result of
  3262.                 -HUGE_VAL. In the complex version, numbers with an imaginary
  3263.                 part of zero are always treated as real numbers; therefore,
  3264.                 an argument {0, 0} is treated as a real 0, causing a SING
  3265.                 error with the default result {-HUGE_VAL,  0}.
  3266. Return value    0, if no error occurred, otherwise non-zero
  3267. See also        VF_pow10,  VF_log,  VF_log2,  VF_pow,  log10
  3268.  
  3269.  
  3270. ┌────────────────────────────────────────────────────────────────────────────┐
  3271. │ VF_log2                   VD_log2                   VE_log2                │
  3272. │ VCF_log2                  VCD_log2                  VCE_log2               │
  3273. │ VFx_log2                  VDx_log2                  VEx_log2               │
  3274. │ VCFx_log2                 VCDx_log2                 VCEx_log2              │
  3275. └────────────────────────────────────────────────────────────────────────────┘
  3276. Function        Binary logarithm
  3277. Syntax          #include <VFmath.h>
  3278.                 int  VF_log2(  fVector  Y,  fVector  X, ui size );
  3279.                 int  VFx_log2( fVector  Y,  fVector  X, ui size,
  3280.                                float A, float B, float C );
  3281. Description     normal versions:    Yi = lb( Xi )
  3282.                 expanded versions:  Yi = C * lb( A*Xi+B )
  3283.                 The binary logarithm (to the basis 2) is calculated.
  3284. Error handling  Real versions: DOMAIN errors occur in the case of negative Xi
  3285.                 (including -0.0), with NAN ("not-a-number") as the default
  3286.                 result. SING errors occur for Xi= +0.0 and yield a result of
  3287.                 -HUGE_VAL. In the complex version, numbers with an imaginary
  3288.                 part of zero are always treated as real numbers; therefore,
  3289.                 an argument {0, 0} is treated as a real 0, causing a SING
  3290.                 error with the default result {-HUGE_VAL,  0}.
  3291. Return value    0, if no error occurred, otherwise non-zero
  3292. See also        VF_pow2,  VF_log,  VF_log10,  VF_pow,  log2 (the latter
  3293.                 function is not defined in ANSI C, but an addition contained
  3294.                 in the VectorLib package, see chapter 9).
  3295.  
  3296.  
  3297. ┌────────────────────────────────────────────────────────────────────────────┐
  3298. │ VF_Lorentz               VD_Lorentz               VE_Lorentz               │
  3299. └────────────────────────────────────────────────────────────────────────────┘
  3300. Function        Lorentzian lineshape function
  3301. Syntax          #include <VFmath.h>
  3302.                 int  VF_Lorentz( fVector Y,  fVector X,  ui siz,
  3303.                                  float Wid,  float Cent,  float C );
  3304. Description    Yi   = C *  Wid² / ( (Xi - Cent)² + Wid² )
  3305.                 Wid  = width of the resonance line
  3306.                 Cent = centre of the line
  3307.                 C is a scaling factor; at the center of the line (Xi=Cent),
  3308.                 the amplitude Yi equals C. This is even true for a width of
  3309.                 zero.
  3310. Error handling  This function should be error-proof.
  3311. Return value    always 0
  3312. See also        VF_Gauss,  VF_sech2
  3313.  
  3314.  
  3315. ┌────────────────────────────────────────────────────────────────────────────┐
  3316. │ VF_mantexp               VD_mantexp               VE_mantexp               │
  3317. └────────────────────────────────────────────────────────────────────────────┘
  3318. Function        Split up the elements of a vector into their mantissa and
  3319.                 exponent parts
  3320. Syntax          #include <VFmath.h>
  3321.                 int  VF_mantexp( fVector MantPart,  iVector ExpPart,
  3322.                                  fVector  X,  ui size );
  3323. Description     The elements of X are split up into their mantissa, stored in
  3324.                 MantPart, and exponent, stored as ints in ExpPart.
  3325. Error handling  none
  3326. Return value    always 0
  3327. See also        VF_scale2,  VF_intfrac,  frexp,  ldexp
  3328.  
  3329.  
  3330. ┌────────────────────────────────────────────────────────────────────────────┐
  3331. │ VF_max                   VD_max                   VE_max                   │
  3332. │ VI_max              VSI_max             VLI_max             VQI_max        │
  3333. │ VU_max              VUS_max             VUL_max             VUI_max        │
  3334. └────────────────────────────────────────────────────────────────────────────┘
  3335. Function        Find the largest element of a vector.
  3336. Syntax          #include <VFstd.h>
  3337.                 float  VF_max( fVector X, ui size );
  3338. Description     The vector X is searched for its largest element, whose value
  3339.                 is returned.
  3340. Error handling  none
  3341. Return value    maximum value encountered.
  3342. See also        VF_min, VF_absmax, VF_runmax, VF_maxind
  3343.  
  3344.  
  3345. ┌────────────────────────────────────────────────────────────────────────────┐
  3346. │ VF_maxC                  VD_maxC                  VE_maxC                  │
  3347. │ VI_maxC            VSI_maxC             VLI_maxC            VQI_maxC       │
  3348. │ VU_maxC            VUS_maxC             VUL_maxC            VUI_maxC       │
  3349. └────────────────────────────────────────────────────────────────────────────┘
  3350. Function        Compare each element of a vector to a constant and take the
  3351.                 larger of the two.
  3352. Syntax          #include <VFmath.h>
  3353.                 void VF_maxC( fVector Y, fVector X, ui size, float C );
  3354. Description     Yi  =  Xi,      if  Xi  >   C
  3355.                 Yi  =  C,       if  Xi  <=  C
  3356. Error handling  none
  3357. Return value    none
  3358. See also        VF_maxV,  VF_minC,  VF_max,  VF_absmax,  VF_limit, VF_flush0
  3359.  
  3360.  
  3361. ┌────────────────────────────────────────────────────────────────────────────┐
  3362. │ VF_maxind                VD_maxind                VE_maxind                │
  3363. │ VI_maxind           VSI_maxind          VLI_maxind          VQI_maxind     │
  3364. │ VU_maxind           VUS_maxind          VUL_maxind          VUI_maxind     │
  3365. └────────────────────────────────────────────────────────────────────────────┘
  3366. Function        Find the largest element of a vector and its index.
  3367. Syntax          #include <VFstd.h>
  3368.                 float  VF_maxind( ui *Ind, fVector X, ui size );
  3369. Description     The vector X is searched for its largest element; its value is
  3370.                 returned. At the address passed as Ind, the index of this
  3371.                 element is stored.In the case of several maxima of equal
  3372.                 height, the first one is chosen (i.e., the smallest index
  3373.                 is stored in Ind).
  3374. Error handling  none
  3375. Return value    maximum value encountered.
  3376. See also        VF_max, VF_minind, VF_absmax, VF_runmax
  3377.  
  3378.  
  3379. ┌────────────────────────────────────────────────────────────────────────────┐
  3380. │ VCF_maxReIm              VCD_maxReIm              VCE_maxReIm              │
  3381. └────────────────────────────────────────────────────────────────────────────┘
  3382. Function        Find the largest real and imaginary parts occurring in a
  3383.                 vector.
  3384. Syntax          #include <VFmath.h>
  3385.                 fComplex   VCF_maxReIm( cfVector X, ui size );
  3386. Description     The vector X is separately searched for its largest real and
  3387.                 imaginary parts.
  3388. Error handling  none
  3389. Return value    struct of type fComplex (dComplex,  eComplex,  resp.), in
  3390.                 which the maxima of the real and imaginary parts of X are
  3391.                 packed together.
  3392. See also        VCF_minReIm,  VCF_absmaxReIm,  VCF_absmax,  VCF_absmaxind
  3393.  
  3394.  
  3395. ┌────────────────────────────────────────────────────────────────────────────┐
  3396. │ VF_maxV                  VD_maxV                  VE_maxV                  │
  3397. │ VI_maxV             VSI_maxV            VLI_maxV            VQI_maxV       │
  3398. │ VU_maxV             VUS_maxV            VUL_maxV            VUI_maxV       │
  3399. └────────────────────────────────────────────────────────────────────────────┘
  3400. Function        Compare each element of a vector to the corresponding element
  3401.                 of another vector and take the larger of the two.
  3402. Syntax          #include <VFmath.h>
  3403.                 void VF_maxV( fVector Z, fVector X, fVector Y, ui size );
  3404. Description     Zi  =  Xi,    if  Xi  >   Yi
  3405.                 Zi  =  Yi,    if  Xi  <=  Yi
  3406. Error handling  none
  3407. Return value    none
  3408. See also        VF_minV,   VF_maxC,  VF_max,   VF_absmax
  3409.  
  3410.  
  3411. ┌────────────────────────────────────────────────────────────────────────────┐
  3412. │ VF_mean                  VD_mean                  VE_mean                  │
  3413. │ VCF_mean                 VCD_mean                 VCE_mean                 │
  3414. │ VI_mean             VSI_mean            VLI_mean            VQI_mean       │
  3415. │ VU_mean             VUS_mean            VUL_mean            VUI_mean       │
  3416. └────────────────────────────────────────────────────────────────────────────┘
  3417. Function        Mean of a one-dimensional distribution
  3418. Syntax          #include <VFstd.h>
  3419.                 float    VF_mean(  fVector  X, ui size );
  3420.                      (similarly VD_, VE_, VCF_, VCD_, VCE_)
  3421.                 double   VI_mean( iVector X, ui size );
  3422.                      (similarly VSI_, VLI_, VU_, VUS_, VUL_, VUI_)
  3423.                 extended VQI_mean( qiVector X, ui size );
  3424. Description     mean  = (1 / size) * sum( Xi )
  3425.                 Integer versions: the mean of a distribution consisting of
  3426.                 whole numbers generally is a fractional, i.e. a floating-
  3427.                 point number. Therefore, the return value of the 16-bit
  3428.                 and 32-bit integer versions is a double. For the 64-bit
  3429.                 integer version VQI_mean, the return value is an extended.
  3430. Error handling  none
  3431. Return value    Mean of the vector elements
  3432. See also        VF_meanwW, VF_median, VF_meanvar, VF_varianceC, VF_linregress
  3433.  
  3434.  
  3435. ┌────────────────────────────────────────────────────────────────────────────┐
  3436. │ VF_meanabs               VD_meanabs               VE_meanabs               │
  3437. └────────────────────────────────────────────────────────────────────────────┘
  3438. Function        Mean of the absolute values of a one-dimensional distribution
  3439. Syntax          #include <VFstd.h>
  3440.                 float    VF_meanabs(  fVector  X, ui size );
  3441. Description     meanabs  = (1 / size) * sum(| Xi |)
  3442. Error handling  none
  3443. Return value    Mean of the absolute values of all vector elements
  3444. See also        VF_mean, VF_sumabs
  3445.  
  3446.  
  3447. ┌────────────────────────────────────────────────────────────────────────────┐
  3448. │ VF_meanvar               VD_meanvar               VE_meanvar               │
  3449. └────────────────────────────────────────────────────────────────────────────┘
  3450. Function        Mean and variance of a one-dimensional distribution
  3451. Syntax          #include <VFstd.h>
  3452.                 float  VF_meanvar( float *Var,  fVector X, ui size );
  3453. Description     mean = (1 / size)     * sum( Xi )
  3454.                 var  = (1 / (size-1)) * sum( (Xi - mean)² )
  3455.                 Note that the denominator in the definition of var is size-1,
  3456.                 whereas, in the routine VF_varianceC, it is simply size.The
  3457.                 reason for that difference is that here the mean is calculated
  3458.                 first and then the variance is determined using this value,
  3459.                 whereas in VF_varianceC, the parameter C is pre-set.
  3460.                 The mean is returned and the variance stored at the address
  3461.                 passed as Var.
  3462. Error handling  none
  3463. Return value    mean of the vector elements.
  3464. See also        VF_mean, VF_varianceC, VF_varianceV, VF_sum, VF_ssq,
  3465.                 VF_ssqdevC, VF_linregress
  3466.  
  3467.  
  3468. ┌────────────────────────────────────────────────────────────────────────────┐
  3469. │ VF_meanvarwW             VD_meanvarwW             VE_meanvarwW             │
  3470. └────────────────────────────────────────────────────────────────────────────┘
  3471. Function        Mean and variance with weights
  3472. Syntax          #include <VFmath.h>
  3473.                 float VF_meanvarwW( float *Var, fVector X, fVector Wt,
  3474.                                     ui size );
  3475. Description     mean =  (1 / sum( Wti )) * sum(  Xi * Wti )
  3476.                 var  =  (1 / sum( Wti )) * sum(  Wti * (Xi - mean)² )
  3477.                 The weighted mean is returned and the variance stored at the
  3478.                 address passed as Var.
  3479. Error handling  none
  3480. Return value    mean of the vector elements.
  3481. See also        VF_meanwW, VF_varianceCwW, VF_varianceVwW, VF_linregress
  3482.  
  3483.  
  3484. ┌────────────────────────────────────────────────────────────────────────────┐
  3485. │ VF_meanwW                VD_meanwW                VE_meanwW                │
  3486. │ VCF_meanwW               VCD_meanwW               VCE_meanwW               │
  3487. └────────────────────────────────────────────────────────────────────────────┘
  3488. Function        Mean with weights
  3489. Syntax          #include <VFstd.h>
  3490.                 float VF_meanwW( fVector X,  fVector Wt, ui size );
  3491.                     (similarly  VD_,  VE_)
  3492.                 fComplex VCF_meanwW( cfVector X, fVector Wt, ui size );
  3493.                     (similarly  VCD_,  VCE_)
  3494. Description     meanwW  =  (1 / sum( Wti )) *  sum( Xi * Wti )
  3495.                 Notice that, also in the complex version, the weights are
  3496.                 always real and not complex.
  3497. Error handling  none
  3498. Return value    weighted mean of the vector elements.
  3499. See also        VF_mean, VF_sum, VF_ssq, VF_ssqdevC, VF_median, VF_mean_varwW,
  3500.                 VF_linregresswW
  3501.  
  3502.  
  3503. ┌────────────────────────────────────────────────────────────────────────────┐
  3504. │ VF_median                VD_median                VE_median                │
  3505. └────────────────────────────────────────────────────────────────────────────┘
  3506. Function        Median of a one-dimensional distribution
  3507. Syntax          #include <VFmath.h>
  3508.                 float  VF_median( fVector X, ui size );
  3509. Description     The median of a distribution is defined as the value for which
  3510.                 values above and below are equally probable, i.e., for which
  3511.                 the number of elements greater and less than the median is
  3512.                 equal. If the table X is ordered, the median is simply the
  3513.                 element with the index (size+1)/2 (if size is odd) or the
  3514.                 mean of the two central elements (if size is even).
  3515.                 If a table is not ordered, VF_median finds its median by
  3516.                 repeatedly scanning through it without actually sorting it.
  3517. Error handling  none
  3518. Return value    The median is returned.
  3519. See also        VF_mean,VF_meanwW, VF_sum
  3520.  
  3521.  
  3522. ┌────────────────────────────────────────────────────────────────────────────┐
  3523. │ VF_min                   VD_min                   VE_min                   │
  3524. │ VI_min              VSI_min             VLI_min             VQI_min        │
  3525. │ VU_min              VUS_min             VUL_min             VUI_min        │
  3526. └────────────────────────────────────────────────────────────────────────────┘
  3527. Function        Finds the smallest (or the most negative) element of a vector.
  3528. Syntax          #include <VFstd.h>
  3529.                 float  VF_min( fVector X, ui size );
  3530. Description     The vector X is searched for its smallest (or most negative)
  3531.                 element.
  3532. Error handling  none
  3533. Return value    Minimum value encountered.
  3534. See also        VF_absmin,  VF_runmin,  VF_minind
  3535.  
  3536.  
  3537. ┌────────────────────────────────────────────────────────────────────────────┐
  3538. │ VF_minC                  VD_minC                  VE_minC                  │
  3539. │ VI_minC             VSI_minC            VLI_minC            VQI_minC       │
  3540. │ VU_minC             VUS_minC            VUL_minC            VUI_minC       │
  3541. └────────────────────────────────────────────────────────────────────────────┘
  3542. Function        Compare each element of a vector to a constant and take the
  3543.                 smaller of the two.
  3544. Syntax          #include <VFmath.h>
  3545.                 void VF_minC( fVector Y, fVector X, ui size, float C );
  3546. Description     Yi  =  Xi,    if  Xi  <=  C
  3547.                 Yi  =  C,     if  Xi  >   C
  3548. Error handling  none
  3549. Return value    none
  3550. See also        VF_minV,  VF_maxC, VF_min, VF_absmin, VF_limit, VF_flush0
  3551.  
  3552.  
  3553. ┌────────────────────────────────────────────────────────────────────────────┐
  3554. │ VF_minind                VD_minind                VE_minind                │
  3555. │ VI_minind           VSI_minind          VLI_minind          VQI_minind     │
  3556. │ VU_minind           VUS_minind          VUL_minind          VUI_minind     │
  3557. └────────────────────────────────────────────────────────────────────────────┘
  3558. Function        Find the smallest (or the most negative) element of a vector
  3559.                 and its index.
  3560. Syntax          #include <VFstd.h>
  3561.                 float  VF_minind( ui *Ind, fVector X, ui size );
  3562. Description     The vector X is searched for its smallest (or most negative)
  3563.                 element; its value is returned. At the address passed as Ind,
  3564.                 the index of this element is stored. In the case of several
  3565.                 mimima of equal depth, the first one is chosen (i.e., the
  3566.                 smallest of their indices is stored in Ind).
  3567. Error handling  none
  3568. Return value    minimum value encountered.
  3569. See also        VF_min, VF_minind, VF_absmin, VF_runmin
  3570.  
  3571.  
  3572. ┌────────────────────────────────────────────────────────────────────────────┐
  3573. │ VCF_minReIm              VCD_minReIm              VCE_minReIm              │
  3574. └────────────────────────────────────────────────────────────────────────────┘
  3575. Function        Find the smallest (or most negative) real and imaginary parts
  3576.                 occurring in a vector.
  3577. Syntax          #include <VCFstd.h>
  3578.                 fComplex  VCF_minReIm( cfVector X, ui size );
  3579. Description     The vector X is separately searched for its smallest real and
  3580.                 imaginary parts.
  3581. Error handling  none
  3582. Return value    struct of type fComplex (dComplex,  eComplex,  resp.), in
  3583.                 which the minima of the real and imaginary parts of X are
  3584.                 packed together.
  3585. See also        VCF_maxReIm,  VCF_absminReIm,  VCF_absmin,  VCF_absminind
  3586.  
  3587.  
  3588. ┌────────────────────────────────────────────────────────────────────────────┐
  3589. │ VF_minV                  VD_minV                  VE_minV                  │
  3590. │ VI_minV             VSI_minV            VLI_minV            VQI_minV       │
  3591. │ VU_minV             VUS_minV            VUL_minV            VUI_minV       │
  3592. └────────────────────────────────────────────────────────────────────────────┘
  3593. Function        Compare each element of a vector to the corresponding element
  3594.                 of another vector and take the smaller of the two.
  3595. Syntax          #include <VFmath.h>
  3596.                 void VF_minV( fVector Z, fVector X, fVector Y, ui size );
  3597. Description     Zi  =  Xi,    if  Xi  <=  Yi
  3598.                 Zi  =  Yi,    if  Xi  >   Yi
  3599. Error handling  none
  3600. Return value    none
  3601. See also        VF_maxV,   VF_minC,  VF_min,   VF_absmin
  3602.  
  3603.  
  3604. ┌────────────────────────────────────────────────────────────────────────────┐
  3605. │ VF_modC                  VD_modC                  VE_modC                  │
  3606. │ VI_modC             VSI_modC            VLI_modC            VQI_modC       │
  3607. │ VU_modC             VUS_modC            VUL_modC            VUI_modC       │
  3608. └────────────────────────────────────────────────────────────────────────────┘
  3609. Function        Modulus, i.e. the remainder of a division by a constant
  3610. Syntax          #include <VFmath.h>
  3611.                 void VF_modC( fVector Y, fVector X, ui size, float C );
  3612. Description     Yi  =  Xi  mod  C
  3613.                 Floating-point versions: a constant C = 0.0 leads to all Yi
  3614.                    being 0.0, independently of the Xi values (as in the
  3615.                    ANSI C math function fmod ).
  3616.                 Integer versions:  a constant C = 0 leads to a ZERODIVIDE
  3617.                    error (as in the intrinsic "%" operation of ANSI C).
  3618. Error handling  none
  3619. Return value    none  (also the floating-point versions are treated as basic
  3620.                 arithmetic rather than mathematical functions, despite their
  3621.                 relation to the math function fmod).
  3622. See also        VF_modV,   VF_addC,  VF_mulC,  VF_divC,  VF_visC,  VF_redC
  3623.  
  3624.  
  3625. ┌────────────────────────────────────────────────────────────────────────────┐
  3626. │ VF_modf                  VD_modf                  VE_modf                  │
  3627. └────────────────────────────────────────────────────────────────────────────┘
  3628. Function        Split up into integer and fractional parts.
  3629. Syntax          #include <VFmath.h>
  3630.                 int  VF_modf( fVector IntPart,  fVector FracPart,
  3631.                               fVector X, ui size );
  3632. Description     These functions are implemented as alias names for VF_intfrac
  3633.                 etc., in order to maintain consistency with the ANSI C
  3634.                 function name modf. For details, see VF_intfrac.
  3635.  
  3636.  
  3637. ┌────────────────────────────────────────────────────────────────────────────┐
  3638. │ VF_modV                  VD_modV                  VE_modV                  │
  3639. │ VFx_modV                 VDx_modV                 VEx_modV                 │
  3640. │ VI_modV             VSI_modV            VLI_modV            VQI_modV       │
  3641. │ VU_modV             VUS_modV            VUL_modV            VUI_modV       │
  3642. └────────────────────────────────────────────────────────────────────────────┘
  3643. Function        Modulus, i.e. the remainder of a division of corresponding
  3644.                 vector elements
  3645. Syntax          #include <VFmath.h>
  3646.                 void  VF_modV(  fVector Z, fVector X, fVector Y, ui size );
  3647.                 void  VFx_modV( fVector Z, fVector X, fVector Y,
  3648.                                 ui size, float A,  float  B );
  3649. Description     normal versions:    Zi  =  Xi  mod  Yi
  3650.                 expanded versions:  Zi  =  (A * Xi + B)  mod Yi
  3651.                 Floating-point versions: an argument Xi = 0.0 leads to Zi
  3652.                    being 0.0, independently of Yi (as in the ANSI C math
  3653.                    function fmod).
  3654.                 Integer versions:  an argument Xi = 0 leads to a ZERODIVIDE
  3655.                    error (as in the intrinsic "%" operation of ANSI C).
  3656. Error handling  none
  3657. Return value    none  (also the floating-point versions are treated as basic
  3658.                 arithmetic rather than mathematical functions, despite their
  3659.                 relation to the math function fmod).
  3660. See also        VF_modC,  VF_addV,  VF_mulV,  VF_divV,  VF_visV,  VF_redV
  3661.  
  3662.  
  3663. ┌────────────────────────────────────────────────────────────────────────────┐
  3664. │ VF_mulC                  VD_mulC                  VE_mulC                  │
  3665. │ VCF_mulC                 VCD_mulC                 VCE_mulC                 │
  3666. │ VCF_mulReC               VCD_mulReC               VCE_mulReC               │
  3667. │ VI_mulC             VSI_mulC            VLI_mulC            VQI_mulC       │
  3668. │ VU_mulC             VUS_mulC            VUL_mulC            VUI_mulC       │
  3669. └────────────────────────────────────────────────────────────────────────────┘
  3670. Function        Multiply all vector elements by a constant
  3671. Syntax          #include <VFmath.h>
  3672.                 void VF_mulC( fVector Y, fVector X, ui size, float C );
  3673.                     (similarly  VD_,  VE_, VI_,  etc.)
  3674.                 void VCF_mulC(  cfVector Y, cfVector X, ui size, fComplex C );
  3675.                 void VCF_mulReC( cfVector Y, cfVector X, ui size, float CRe );
  3676.                     (similarly  VCD_,  VCE_)
  3677. Description     Yi  =  C  *  Xi
  3678.                 The complex floating-point versions exist in two variants, one
  3679.                 for complex constants C, the other for real-valued constants
  3680.                 CRe by which the complex vector is multiplied.
  3681. Error handling  none
  3682. Return value    none
  3683. See also        VF_mulV,  VF_addC,   VF_divC,  VF_divrC,  VF_visC,  VF_redC
  3684.  
  3685.  
  3686. ┌────────────────────────────────────────────────────────────────────────────┐
  3687. │ VF_mulV                  VD_mulV                  VE_mulV                  │
  3688. │ VCF_mulV                 VCD_mulV                 VCE_mulV                 │
  3689. │ VCF_mulReV               VCD_mulReV               VCE_mulReV               │
  3690. │ VFs_mulV                 VDs_mulV                 VEs_mulV                 │
  3691. │ VFx_mulV                 VDx_mulV                 VEx_mulV                 │
  3692. │ VCFx_mulV                VCDx_mulV                VCEx_mulV                │
  3693. │ VCFx_mulReV              VCDx_mulReV              VCEx_mulReV              │
  3694. │ VI_mulV             VSI_mulV            VLI_mulV            VQI_mulV       │
  3695. │ VU_mulV             VUS_mulV            VUL_mulV            VUI_mulV       │
  3696. └────────────────────────────────────────────────────────────────────────────┘
  3697. Function        Multiply corresponding vector elements
  3698. Syntax          #include <VFmath.h>
  3699.                 void  VF_mulV(  fVector Z, fVector X, fVector Y, ui size );
  3700.                 void  VFs_mulV( fVector Z, fVector X, fVector Y, ui size,
  3701.                                 float C );
  3702.                 void  VFx_mulV( fVector Z, fVector X, fVector Y,
  3703.                                 ui size, float A,  float  B );
  3704.                 void  VCF_mulV( cfVector Z,  cfVector X,  cfVector Y,
  3705.                                 ui size );
  3706.                 void  VCF_mulReV( cfVector Z,  cfVector X, fVector Y,
  3707.                                   ui size );
  3708.                 void  VCFx_mulV(  cfVector Z, cfVector X, cfVector Y,
  3709.                                   ui size, fComplex A,  fComplex B );
  3710.                 void  VCFx_mulReV( cfVector Z, cfVector X, fVector Y,
  3711.                                    ui size, fComplex A, fComplex B );
  3712. Description     normal versions:    Zi  =  Xi  *  Yi
  3713.                 scaled versions:    Zi  =  C * (Xi * Yi)
  3714.                 expanded versions:  Zi  =  (A * Xi + B)  *  Yi
  3715.                 The complex floating-point versions exist in two variants: in
  3716.                 the first variant (e.g. VCF_mulV,  VCFx_mulV), X, Y, and Z are
  3717.                 all complex; in the second variant, Y is real-valued
  3718.                 (e.g. VCF_mulReV - "multiply by a real vector").
  3719. Error handling  none
  3720. Return value    none
  3721. See also        VF_mulC,  VF_addV,  VF_subV,  VF_divV,  VF_visV,  VF_redV
  3722.  
  3723.  
  3724. ┌────────────────────────────────────────────────────────────────────────────┐
  3725. │ VF_neg                   VD_neg                   VE_neg                   │
  3726. │ VCF_neg                  VCD_neg                  VCE_neg                  │
  3727. │ VI_neg              VSI_neg             VLI_neg             VQI_neg        │
  3728. └────────────────────────────────────────────────────────────────────────────┘
  3729. Function        Negation
  3730. Syntax          #include <VFmath.h>
  3731.                 int  VF_neg( fVector Y,  fVector X,  ui size );
  3732. Description     Yi  =  - (Xi)
  3733.                 VSI_,  VI_, and VLI_ versions only: the negation of the most
  3734.                 negative number possible (-32768 for short, -2147483648 for
  3735.                 long) is again the same - negative! - number. This is due to
  3736.                 the implicit modulo-2**n arithmetics, where the overflowing
  3737.                 short +32768 is stored as -32768, and the overflowing long
  3738.                 +2147483648 is stored as -2147483648.
  3739. Error handling  none
  3740. Return value    By analogy with VF_abs,  the floating-point versions are
  3741.                 treated as math functions. Therefore, they have a return
  3742.                 value which, since no errors can occur, is always 0. The
  3743.                 integer versions have no return value.
  3744. See also        VF_abs,  VCF_conj
  3745.  
  3746.  
  3747. ┌────────────────────────────────────────────────────────────────────────────┐
  3748. │ V_nfree                                                                    │
  3749. └────────────────────────────────────────────────────────────────────────────┘
  3750. Function        De-allocate memory occupied by one or more vectors.
  3751. Syntax          #include <VecLib.h>
  3752.                 void  V_nfree(  unsigned numfree, ... );
  3753. Description     The parameter numfree "tells" the function how many vectors it
  3754.                 has to free. These vectors follow in the parameter list after
  3755.                 numfree. De-allocation of vectors not allocated by one of the
  3756.                 functions of the VF_vector or VF_vector0 family is dis-
  3757.                 couraged, especially in Windows programs.
  3758.                 Note for Turbo Pascal users: since a variable number of
  3759.                 parameters is not supported in Turbo Pascal, this
  3760.                 function is missing in VectorLib for Turbo Pascal.
  3761. Example         V_nfree( 3, X, Y, Z );
  3762. Error handling  see V_free
  3763. Return value    none
  3764. See also        V_free,  VF_vector,  VF_vector0
  3765.  
  3766.  
  3767. ┌────────────────────────────────────────────────────────────────────────────┐
  3768. │ VF_noise                 VD_noise                 VE_noise                 │
  3769. └────────────────────────────────────────────────────────────────────────────┘
  3770. Function        Initialize a vector with "white" noise
  3771. Syntax          #include <VFstd.h>
  3772.                 long VF_noise( fVector X, ui size, long seed, float Amp );
  3773. Description     White noise is generated with the amplitude Amp, i.e., the
  3774.                 output values are between -Amp/2 and +Amp/2 (both extrema
  3775.                 included). seed may be chosen completely arbitrary; successive
  3776.                 calls with the same seed yield identical results, for
  3777.                 different values of seed, the obtained results are
  3778.                 uncorrelated.
  3779.  
  3780.                 Internally, these functions employ a 32-bit integer random
  3781.                 number generator by H.W.Lewis, with additional steps (so-
  3782.                 called "Bays-Durham shuffle") to break sequential correla-
  3783.                 tions. This ensures very good randomness, far superior
  3784.                 to simpler generators (like the rand function shipped with
  3785.                 Borland C++).
  3786.  
  3787.                 A long value is returned which may be used as new seed for
  3788.                 subsequent calls.
  3789. Error handling  none
  3790. Return value    last 32-bit random number internally generated; may be used as
  3791.                 new seed value for future calls.
  3792. See also        rand, random, VF_random
  3793.  
  3794.  
  3795. ┌────────────────────────────────────────────────────────────────────────────┐
  3796. │ VCF_norm                 VCD_norm                 VCE_norm                 │
  3797. └────────────────────────────────────────────────────────────────────────────┘
  3798. Function        Norm (square of the magnitude) of cartesian complex numbers.
  3799.                 Implemented as macros calling VF_CtoNorm, VD_CtoNorm,
  3800.                 and VE_CtoNorm, resp.  See these functions for details.
  3801.  
  3802.  
  3803. ┌────────────────────────────────────────────────────────────────────────────┐
  3804. │ VI_not              VSI_not             VLI_not             VQI_not        │
  3805. │ VU_not              VUS_not             VUL_not             VUI_not        │
  3806. └────────────────────────────────────────────────────────────────────────────┘
  3807. Function        Bit-wise complement
  3808. Syntax          #include <VImath.h>
  3809.                 void VI_not( iVector Y,  iVector X,  ui size );
  3810. Description     Yi  =  ~(Xi)
  3811.                 Each single bit of the element Xi is inverted (i.e., it is 0
  3812.                 in Yi, if it was 1 in Xi, and vice versa).
  3813. Error handling  none
  3814. Return value    none
  3815. See also        VI_and,  VI_or,  VI_neg
  3816.  
  3817.  
  3818. ┌────────────────────────────────────────────────────────────────────────────┐
  3819. │ V_noteError                                                                │
  3820. └────────────────────────────────────────────────────────────────────────────┘
  3821. Function        Construct and print an error message
  3822. Syntax          #include <VecLib.h>
  3823.                 void  V_noteError( char *fname, unsigned why );
  3824. Description     In case of an error, the math functions of VectorLib invoke
  3825.                 the following steps: First call _matherr (or _matherrl),
  3826.                 then inspect the return value of _matherr (or _matherrl) and
  3827.                 call V_noteError in case this return value was 0.
  3828.                 V_noteError then constructs the appropriate error message and
  3829.                 passes it to V_printErrorMsg, which is the function in charge
  3830.                 of actually printing the error message.
  3831.                 By default, the message is printed to the screen. The function
  3832.                 V_setErrorEventFile may be used to change this default action
  3833.                 and to redirect the output into an event file (exclusively or
  3834.                 in addition to the screen message).
  3835.                 fname is the name of the "complaining" function and  why
  3836.                 specifies the reason for the complaint (as defined in <math.h>
  3837.                 and described in connection with _matherr in the Borland C++
  3838.                 documentation). How to call V_noteError from a user-defined
  3839.                 _matherr function is described in chapter 5.3.  This function
  3840.                 will not be included in versions of VectorLib for compilers
  3841.                 that do already offer the possibility of printing error
  3842.                 messages simultaneously to the screen and to an event file.
  3843. Return value    none
  3844. See also        V_setErrorEventFile,  V_printErrorMsg, _matherr
  3845.  
  3846.  
  3847. ┌────────────────────────────────────────────────────────────────────────────┐
  3848. │ VF_nread                 VD_nread                 VE_nread                 │
  3849. │ VCF_nread                VCD_nread                VCE_nread                │
  3850. │ VI_nread            VSI_nread           VLI_nread           VQI_nread      │
  3851. │ VU_nread            VUS_nread           VUL_nread           VUI_nread      │
  3852. └────────────────────────────────────────────────────────────────────────────┘
  3853. Function        Read the columns of a table from a stream
  3854. Syntax          #include <VFstd.h>
  3855.                 VF_nread( unsigned n, ui size, FILE *stream, ... );
  3856. Description     n columns of a table are read into the vectors passed to
  3857.                 VF_nread. The number of lines is specified as the number
  3858.                 of elements of each vector, which is size.
  3859.  
  3860.                 The entries of each line should be separated by spaces
  3861.                 (' ') or tab characters ('\t').
  3862.  
  3863.                 Each line must be terminated by a line-feed character ('\n').
  3864.                 The length of the lines is limited according the following
  3865.                 rules:
  3866.                 - Either all lines have the same length. In this case, the
  3867.                   length is determined automatically and might in principle
  3868.                   be as large as 65535 characters.
  3869.                 - Or the maximum length is given by the number n of vectors
  3870.                   to be read and by the data type:
  3871.                     VF_    24*n        VSI_,  VUS_   21*n
  3872.                     VD_    32*n        VLI_,  VUL_   37*n
  3873.                     VE_    40*n        VQI_          32*n
  3874.                     VCF_   48*n        VI_,   VU_    as VSI_, VUS_  (in the
  3875.                     VCD_   64*n                      memory model FLAT as
  3876.                     VCE_   80*n                      VLI_, VUL_)
  3877.  
  3878.                 It is possible to read fewer vectors than there are columns
  3879.                 in a table. In this case, the trailing columns are neglected.
  3880.                 If, however, you try to read more vectors than there are
  3881.                 columns, the result is undefined and might lead to an error.
  3882.  
  3883.                 Complex versions:
  3884.                       Real und imaginary parts may (but need not) be enclosed
  3885.                       in braces { }. However, you must be consequent: Either
  3886.                       all or no element may be written with braces.
  3887.  
  3888.                 Whole-number versions except VQI_nread:
  3889.                        By default, the numbers to be read are interpreted
  3890.                        as decimal numbers. You may use V_setRadix to define
  3891.                        any radix between 2 and 36.
  3892. Example         VF_nread( 3, 100, DataFile, X, Y, Z );
  3893. Error handling  Real, complex and quad versions:
  3894.                       Overflowing numbers are silently truncated to
  3895.                       ±HUGE_VAL.
  3896.                  Whole-number versions except VQI_nread:
  3897.                       As long as the numbers can be represented as long or
  3898.                       unsigned long, overflowing bits are ignored in the
  3899.                       16-bit versions.
  3900.                       Numbers beyond the long range yield -1 (signed types)
  3901.                       or +HUGE_VAL (unsigned types).
  3902. Return value    none
  3903. See also        VF_nwrite, VF_read, VF_store, VF_recall, strtod, strtol
  3904.  
  3905.  
  3906. ┌────────────────────────────────────────────────────────────────────────────┐
  3907. │ VF_nwrite                VD_nwrite                VE_nwrite                │
  3908. │ VCF_nwrite               VCD_nwrite               VCE_nwrite               │
  3909. │ VI_nwrite           VSI_nwrite          VLI_nwrite          VQI_nwrite     │
  3910. │ VU_nwrite           VUS_nwrite          VUL_nwrite          VUI_nwrite     │
  3911. └────────────────────────────────────────────────────────────────────────────┘
  3912. Function        Write vectors as the columns of a table into a stream.
  3913. Syntax          #include <VFstd.h>
  3914.                 VF_nwrite( FILE *stream, unsigned n, ui size, ... );
  3915. Description     n vectors are written in ASCII format as the columns of a
  3916.                 table into stream. The number of lines is given by the
  3917.                 number of elements of each vector: size.
  3918.  
  3919.                 The default format and separation may be changed using
  3920.                 VF_setWriteFormat and VF_setNWriteSeparate, respectively.
  3921.  
  3922. Example         VF_nwrite( DataFile, 3, 100, X, Y, Z );
  3923.                      /* generates a table with 3 columns and 100 lines;
  3924.                         the columns are given by X, Y and Z.           */
  3925. Error handling  none
  3926. Return value    none
  3927. See also        VF_write, VF_nread, VF_store, VF_recall, fprintf
  3928.  
  3929.  
  3930. ┌────────────────────────────────────────────────────────────────────────────┐
  3931. │ VF_OD                    VD_OD                    VE_OD                    │
  3932. │ VU_ODtoF       VUB_ODtoF      VUS_ODtoF      VUL_ODtoF      VUI_ODtoF      │
  3933. │ VU_ODtoD       VUB_ODtoD      VUS_ODtoD      VUL_ODtoD      VUI_ODtoD      │
  3934. │ VU_ODtoE       VUB_ODtoE      VUS_ODtoE      VUL_ODtoE      VUI_ODtoE      │
  3935. └────────────────────────────────────────────────────────────────────────────┘
  3936. Function        Optical Density
  3937. Syntax          #include <VFmath.h>
  3938.                 int VF_OD( fVector OD, fVector X, fVector X0, ui size );
  3939.                 int VUS_ODtoF( fVector OD, usVector X, usVector X0, ui size );
  3940.  
  3941. Description     OD = log10( X0/X )  for X0 >= ODThresh0 && X >= ODThresh,
  3942.                 OD = 0.0            otherwise
  3943.  
  3944.                 The "optical density" is calculated for positive, non-
  3945.                 zero input numbers. By default, ODThresh and ODThresh0
  3946.                 are 0.001 for the versions with floating-point input
  3947.                 vectors (VF_OD, VD_OD, and VE_OD), and 1 for the versions
  3948.                 with unsigned-integer input vectors.
  3949.                 The typical application of these functions would be an
  3950.                 absorption measurement with a spectrometer, where each
  3951.                 element of X corresponds to the light intensity at one
  3952.                 specific wavelength, transmitted through the sample, and
  3953.                 each element of X0 corresponds to the light intensity
  3954.                 measured through air or through a reference sample.
  3955.                 Normally, the intensity data will have been digitized
  3956.                 with 12-bit or 16-bit precision. In this case, VUS_ODtoF
  3957.                 or VUS_ODtoD will be the appropriate functions. For the
  3958.                 rare cases of 8-bit or higher than 16-bit digitization,
  3959.                 use the VUB_ or VUL_ versions.
  3960.                 You might, however, wish to accumulate several measurements
  3961.                 before calculating the OD. For example, repeated measurements
  3962.                 in a usVector may be accumulated into a ulVector by
  3963.                 VUL_accVUS, before the OD is calculated by VUL_ODtoD.
  3964.                 Similarly, you might accumulate 32-bit data into a qiVector
  3965.                 by VQI_accVUL and call then, e.g., VQI_ODtoE.
  3966.  
  3967.                 In order to cut off experimental noise, the input-number
  3968.                 threshold below which the OD is set to 0.0 may be set to
  3969.                 arbitrary positive values by VF_setODThresh, VUS_setODThresh,
  3970.                 etc.
  3971.  
  3972.                 If background values have to be taken into account, please
  3973.                 use the functions of the VF_ODwDark family.
  3974. Error handling  none
  3975. Return value    always 0
  3976. See also        VF_ODwDark, VF_log10
  3977.  
  3978.  
  3979. ┌────────────────────────────────────────────────────────────────────────────┐
  3980. │ VF_ODwDark               VD_ODwDark               VE_ODwDark               │
  3981. │ VU_ODtoFwDark    VUB_ODtoFwDark    VUS_ODtoFwDark    VUL_ODtoFwDark        │
  3982. │ VU_ODtoDwDark    VUB_ODtoDwDark    VUS_ODtoDwDark    VUL_ODtoDwDark        │
  3983. │ VU_ODtoEwDark    VUB_ODtoEwDark    VUS_ODtoEwDark    VUL_ODtoEwDark        │
  3984. └────────────────────────────────────────────────────────────────────────────┘
  3985. Function        Optical Density with background subtraction
  3986. Syntax          #include <VFmath.h>
  3987.                 int VF_ODwDark( fVector OD, fVector X, fVector XDark,
  3988.                                 fVector X0, fVector X0Dark, ui size );
  3989.                 int VUS_ODtoFwDark( fVector OD, usVector X, usVector XDark,
  3990.                                 usVector X0, usVector X0Dark, ui size );
  3991. Description     xxi = Xi - XiDark
  3992.                 x0i = X0i - X0iDark
  3993.                 ODi = log10( x0i/xxi ), x0i >= ODThresh0 && xxi >= ODThresh,
  3994.                 ODi = 0.0               otherwise
  3995.  
  3996.                 Dark currents XDark, X0Dark are subtracted from measured
  3997.                 intensity data X, X0. The optical density is calculated
  3998.                 for the resulting corrected data. If these happen to become
  3999.                 negative or at least smaller than the thresholds
  4000.                 ODThresh, ODThresh0, the OD is set to 0.0.
  4001.  
  4002.                 In order to cut off experimental noise, these thresholds
  4003.                 may be set to arbitrary positive values by VF_setODThresh,
  4004.                 VUS_setODThresh, etc.
  4005. Error handling  none
  4006. Return value    always 0
  4007. See also        VF_OD, VF_setODThresh
  4008.  
  4009.  
  4010. ┌────────────────────────────────────────────────────────────────────────────┐
  4011. │ VI_or               VSI_or              VLI_or              VQI_or         │
  4012. │ VU_or               VUS_or              VUL_or              VUI_or         │
  4013. └────────────────────────────────────────────────────────────────────────────┘
  4014. Function        Bit-wise "OR" operation
  4015. Syntax          #include <VImath.h>
  4016.                 void VI_or( iVector Y,  iVector X,  ui size,  int C);
  4017.                 void VUL_or( ulVector Y, ulVector X,  ui size,
  4018.                              unsigned long C );
  4019. Description     Yi  =  (Xi) │ C
  4020.                 The bit-wise "inclusive OR" operation is performed on each
  4021.                 element Xi with the bit-mask given by C. A bit is 1 in Yi, if
  4022.                 it was not simultaneously 0 in Xi and in C, i.e., if it was 1
  4023.                 at least in one of them.
  4024. Error handling  none
  4025. Return value    none
  4026. See also        VI_not,  VI_and,  VI_xor
  4027.  
  4028.  
  4029. ┌────────────────────────────────────────────────────────────────────────────┐
  4030. │ VF_Parzen                VD_Parzen                VE_Parzen                │
  4031. └────────────────────────────────────────────────────────────────────────────┘
  4032. Function        "Parzen" window for spectral analyses
  4033. Syntax          #include <VFmath.h>
  4034.                 void VF_Parzen( fVector X, ui size );
  4035. Description     Xi  = 1 - │(i - 0.5*(size - 1)) / 0.5*(size + 1)│
  4036. Error handling  none
  4037. Return value    none
  4038. See also        VF_Welch, VF_Hanning, VF_spectrum
  4039.  
  4040.  
  4041. ┌────────────────────────────────────────────────────────────────────────────┐
  4042. │ VCF_polar                VCD_polar                VCE_polar                │
  4043. └────────────────────────────────────────────────────────────────────────────┘
  4044. Function        Construct Cartesian complex numbers from polar coordinates
  4045.                 Implemented as a macro that calls VF_PolartoC, VD_PolartoC,
  4046.                 VE_PolartoC, resp.  See these functions for details.
  4047.  
  4048.  
  4049. ┌────────────────────────────────────────────────────────────────────────────┐
  4050. │ VF_PolartoC              VD_PolartoC              VE_PolartoC              │
  4051. └────────────────────────────────────────────────────────────────────────────┘
  4052. Function        Construct Cartesian complex numbers from polar coordinates
  4053. Syntax          #include <VFmath.h>
  4054.                 void VF_PolartoC( cfVector X,  fVector Mag,
  4055.                                   fVector Arg, ui size );
  4056. Description     The polar coordinates Mag (magnitude, absolute value) and
  4057.                 Arg (argument, angle) of each element are used to construct
  4058.                 the Cartesian complex vector X.
  4059. Error handling  The total loss of precision for very large values of Arg is
  4060.                 treated tacitly (without an error message); if it occurs,
  4061.                 the result is set to {Magi, 0}.
  4062. Return value    none
  4063. See also        VF_CtoPolar, VF_ReImtoC, VF_CtoAbs, VF_CtoArg, VF_CtoNorm
  4064.  
  4065.  
  4066. ┌────────────────────────────────────────────────────────────────────────────┐
  4067. │ VF_poly                  VD_poly                  VE_poly                  │
  4068. │ VFx_poly                 VDx_poly                 VEx_poly                 │
  4069. └────────────────────────────────────────────────────────────────────────────┘
  4070. Function        Polynomial
  4071. Syntax          #include <VFmath.h>
  4072.                 int  VF_poly( fVector  Y,  fVector  X, ui size,
  4073.                               fVector Coeff,  unsigned deg );
  4074.                 int  VFx_poly(  fVector  Y,  fVector  X, ui size,
  4075.                                 fVector Coeff,  unsigned deg,
  4076.                                 float A, float B );
  4077. Description     normal versions:
  4078.                        Yi  =  c0 + c1 * Xi + c2 * Xi² + ... + cn * Xi**n
  4079.                 expanded versions:
  4080.                        xi  =  (A*Xi + B),
  4081.                        Yi  =  c0 + c1 * xi + c2 * xi² + ... + cn * xi**n
  4082.                 A polynomial of degree deg is generated for every element of
  4083.                 X, using the coefficients contained in the vector Coeff.
  4084.                 The coefficients in Coeff have to be ordered in such a way
  4085.                 that the constant term is the zeroth element, the linear
  4086.                 coefficient the first element etc., up to the deg'th  element
  4087.                 which is the coefficient for the highest power used in the
  4088.                 polynomial. (Beware a frequent source of errors: for a
  4089.                 polynomial of deg = 4, there are 5 (!) coefficients; do not
  4090.                 forget the constant term).
  4091. Error handling  OVERFLOW errors lead to ±HUGE_VAL as the default result. In
  4092.                 contrast to the ANSI C function poly (where deg is declared
  4093.                 as int), the declaration of deg as unsigned precludes DOMAIN
  4094.                 errors (which would occur for negative deg).
  4095. Return value    0, if no error occurred, otherwise non-zero
  4096. See also        VF_ipow,  VF_pow,  poly
  4097.  
  4098.  
  4099. ┌────────────────────────────────────────────────────────────────────────────┐
  4100. │ VF_polyinterpol          VD_polyinterpol          VE_polyinterpol          │
  4101. └────────────────────────────────────────────────────────────────────────────┘
  4102. Function        Polynomial interpolation of X-Y-table values
  4103. Syntax          #include <VFstd.h>
  4104.                 void VF_polyinterpol(
  4105.                       fVector Y,    fVector X,    ui sizex,
  4106.                       fVector XTab, fVector YTab, ui sizetab,
  4107.                       unsigned deg );
  4108. Description     For each of the sizex elements of X, the corresponding element
  4109.                 of Y is interpolated from the XTab-YTab value pairs. XTab must
  4110.                 be ordered (either ascending or descending). All values of
  4111.                 XTab must be distinct; otherwise a division by zero may occur
  4112.                 and lead to a program abort. For each element of X, the
  4113.                 routine finds itself the appropriate place in the table. The
  4114.                 parameter deg denotes the number of points that will be taken
  4115.                 into account for the interpolation (this is not the degree of
  4116.                 the interpolating polynomial!). Any value between 0 and 2 will
  4117.                 be interpreted as meaning linear interpolation. A maximum of
  4118.                 10-point interpolation is possible.
  4119. Error handling  Trying to use too many elements for the interpolation
  4120.                 (deg > 10) leads to an error message "Not possible with more
  4121.                 than 10 elements" and to a program abort. If deg exceeds
  4122.                 sizetab, an error message "Invalid parameter(s)" is displayed
  4123.                 and the program aborted.
  4124.                 No other errors are detected (you have to take care yourself
  4125.                 that the XTab values are distinct and that the YTab values
  4126.                 are not near the limit of overflowing).
  4127. Return value    none
  4128. See also        VF_ratinterpol, VF_splineinterpol
  4129.  
  4130.  
  4131. ┌────────────────────────────────────────────────────────────────────────────┐
  4132. │ VF_pow                   VD_pow                   VE_pow                   │
  4133. │ VCF_pow                  VCD_pow                  VCE_pow                  │
  4134. │ VFx_pow                  VDx_pow                  VEx_pow                  │
  4135. │ VCFx_pow                 VCDx_pow                 VCEx_pow                 │
  4136. │ VCF_powReExpo            VCD_powReExpo            VCE_powReExpo            │
  4137. │ VCFx_powReExpo           VCDx_powReExpo           VCEx_powReExpo           │
  4138. └────────────────────────────────────────────────────────────────────────────┘
  4139. Function        Raise each element of a vector to a specified power
  4140. Syntax          #include <VFmath.h>
  4141.                 int  VF_pow( fVector Y, fVector X, ui size, float Expo );
  4142.                 int  VFx_pow(  fVector Y, fVector X, ui size, float Expo,
  4143.                                float A, float B, float C );
  4144.                 int  VCF_pow(  cfVector Y, cfVector X, ui size,
  4145.                                fComplex Expo );
  4146.                 int  VCFx_pow( cfVector Y,  cfVector X, ui size,
  4147.                                fComplex Expo,
  4148.                                fComplex A, fComplex B, fComplex C );
  4149.                 int  VCF_powReExpo(  cfVector Y, cfVector X, ui size,
  4150.                                float Expo );
  4151.                 int  VCFx_powReExpo( cfVector Y,  cfVector X, ui size,
  4152.                                float Expo,
  4153.                                fComplex A, fComplex B, fComplex C );
  4154. Description     normal versions:     Yi  =  Xi ** Expo
  4155.                 expanded versions:   Yi  =  C *  ((A*Xi+B) ** Expo)
  4156.                 If Expo is a moderately small integer number, the functions of
  4157.                 this family pass the job to the appropriate routine of the
  4158.                 VF_ipow family. More efficiently, the user could do just that
  4159.                 himself.
  4160.                 The complex version exists in two variants: one for complex
  4161.                 exponents, the other for complex numbers raised to a real
  4162.                 exponent.
  4163. Error handling  DOMAIN errors occur, if negative numbers are raised to
  4164.                 fractional powers; the default result is NAN ("not-a-number").
  4165.                 SING errors occur, if zero is raised to a negative power; the
  4166.                 default result is ±HUGE_VAL, which is true for OVERFLOW errors
  4167.                 as well.
  4168. Return value    0, if no error occurred, otherwise non-zero
  4169. See also        VF_ipow,  VF_poly,  VF_pow2,  VF_exp,  pow
  4170.  
  4171.  
  4172. ┌────────────────────────────────────────────────────────────────────────────┐
  4173. │ VF_pow10                 VD_pow10                 VE_pow10                 │
  4174. │ VFx_pow10                VDx_pow10                VEx_pow10                │
  4175. └────────────────────────────────────────────────────────────────────────────┘
  4176. Function        Real powers of 10
  4177. Syntax          #include <VFmath.h>
  4178.                 int  VF_pow10(  fVector Y, fVector  X, ui size );
  4179.                 int  VFx_pow10( fVector Y, fVector X, ui size,
  4180.                                 float A, float B, float C );
  4181. Description     normal versions:    Yi  =  10.0 ** Xi
  4182.                 expanded versions:  Yi  =  C * 10.0 ** (A*Xi+B)
  4183.                 This is an exponential function to the basis of 10.0.
  4184. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  4185. Return value    0, if no error occurred, otherwise non-zero
  4186. See also        VF_ipow10,  VF_scale10,  VF_log10,  VF_pow,  VF_exp,  pow
  4187.  
  4188.  
  4189. ┌────────────────────────────────────────────────────────────────────────────┐
  4190. │ VF_pow2                  VD_pow2                  VE_pow2                  │
  4191. │ VFx_pow2                 VDx_pow2                 VEx_pow2                 │
  4192. └────────────────────────────────────────────────────────────────────────────┘
  4193. Function        Real powers of 2
  4194. Syntax          #include <VFmath.h>
  4195.                 int  VF_pow2(  fVector Y, fVector X, ui size );
  4196.                 int  VFx_pow2( fVector Y, fVector X, ui size,
  4197.                                float A, float B, float C );
  4198. Description     normal versions:    Yi  =  2.0 ** Xi
  4199.                 expanded versions:  Yi  =  C * 2.0 ** (A*Xi+B)
  4200.                 This is an exponential function to the basis of 2.0.
  4201. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  4202. Return value    0, if no error occurred, otherwise non-zero
  4203. See also        VF_ipow2,  VF_scale2,  VF_log2,  VF_pow,  VF_exp,  pow
  4204.  
  4205.  
  4206. ┌────────────────────────────────────────────────────────────────────────────┐
  4207. │ VF_print                 VD_print                 VE_print                 │
  4208. │ VCF_print                VCD_print                VCE_print                │
  4209. │ VI_print            VSI_print           VLI_print           VQI_print      │
  4210. │ VU_print            VUS_print           VUL_print           VUI_print      │
  4211. └────────────────────────────────────────────────────────────────────────────┘
  4212. Function        Print a vector as ASCII numbers to stdout, assuming a
  4213.                 linewidth of 80 characters.
  4214. Syntax          #include <VFstd.h>
  4215.                 VF_print( fVector X, ui size,  unsigned nperline );
  4216. Description     size elements of X are printed to stdout,  nperline in each
  4217.                 line. The available linewidth is assumed to be 80 characters.
  4218.                 Each line begins with the index of the first element printed
  4219.                 into that line. The index is followed by a colon and by
  4220.                 the requested nperline elements.
  4221.                 Complex numbers are printed in braces, with the real and
  4222.                 imaginary parts separated by a komma:   {Re, Im}.
  4223.  
  4224.                 In contrast to VF_cprint, no paging is performed.
  4225.                 The number of digits per element is determined by the
  4226.                 available space, which depends in turn on nperline.
  4227.  
  4228.                 This family of functions is available under Windows only in
  4229.                 connection with EasyWin, and should not be used within
  4230.                 TurboVision programs.
  4231. Error handling  If nperline exceeds the maximum number of entries possible
  4232.                 within 80 characters, an error message "Cannot use requested
  4233.                 format (too many entries per line)" is generated; in this
  4234.                 case, the program chooses the maximum number nperline
  4235.                 possible.
  4236. Return value    none
  4237. See also        printf, VF_cprint, VF_fprint, VF_write, VF_store
  4238.  
  4239.  
  4240. ┌────────────────────────────────────────────────────────────────────────────┐
  4241. │ V_printErrorMsg                                                            │
  4242. └────────────────────────────────────────────────────────────────────────────┘
  4243. Function        Print an error message.
  4244. Syntax          #include <VecLib.h>
  4245.                 void  V_printErrorMsg( char *ErrMsg );
  4246. Description     As described in connection with V_noteError, this function is
  4247.                 in charge of printing error messages. By default, output is
  4248.                 directed to the screen. The function V_setErrorEventFile may
  4249.                 be used to redirect the output into an event file (exclusively
  4250.                 or in addition to the screen message). V_printErrorMsg may be
  4251.                 called from user-defined routines in which error conditions
  4252.                 are detected. If the message is longer than one line, carriage
  4253.                 returns ("\n" or "\r\n") have to be included at the desired
  4254.                 place. Note, however, that this function will not be included
  4255.                 in versions of VectorLib for compilers that do already offer
  4256.                 the possibility of printing error messages simultaneously to
  4257.                 the screen and to an event file.
  4258. Return value    none
  4259. See also        V_setErrorEventFile,  V_noteError, _matherr
  4260.  
  4261.  
  4262. ┌────────────────────────────────────────────────────────────────────────────┐
  4263. │ VF_prod                  VD_prod                  VE_prod                  │
  4264. │ VCF_prod                 VCD_prod                 VCE_prod                 │
  4265. └────────────────────────────────────────────────────────────────────────────┘
  4266. Function        Calculates the product of all the elements of a vector.
  4267. Syntax          #include <VFstd.h>
  4268.                 float   VF_prod( fVector X, ui size );
  4269. Description     The product of all elements of a vector is calculated.
  4270. Error handling  none (but be careful: this function may easily overflow!)
  4271. Return value    the product of the vector elements
  4272. See also        VF_runprod, VF_sum
  4273.  
  4274.  
  4275. ┌────────────────────────────────────────────────────────────────────────────┐
  4276. │ VF_quartic               VD_quartic               VE_quartic               │
  4277. │ VFx_quartic              VDx_quartic              VEx_quartic              │
  4278. │ VFu_quartic              VDu_quartic              VEu_quartic              │
  4279. │ VFux_quartic             VDux_quartic             VEux_quartic             │
  4280. │ VCF_quartic              VCD_quartic              VCE_quartic              │
  4281. │ VCFx_quartic             VCDx_quartic             VCEx_quartic             │
  4282. └────────────────────────────────────────────────────────────────────────────┘
  4283. Function        Fourth power
  4284. Syntax          #include <VFmath.h>
  4285.                 int  VF_quartic(  fVector  Y,  fVector  X, ui size );
  4286.                 int  VFx_quartic( fVector Y,  fVector  X, ui size,
  4287.                                   float A, float B );
  4288.                 int  VFu_quartic(  fVector  Y,  fVector  X, ui size );
  4289.                 int  VFux_quartic( fVector Y,  fVector  X, ui size,
  4290.                                    float A, float B );
  4291. Description     normal versions:    Yi  =  Xi ** 4
  4292.                 expanded versions:  Yi  =  (A*Xi+B) ** 4
  4293.                 The fourth power of the elements of X is stored in Y.
  4294.                 The "unprotected" versions (prefix VFu_ and VFux_) do not
  4295.                 perform any error handling, which makes them very fast;
  4296.                 they should be used very carefully.
  4297. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL.
  4298. Return value    0, if no error occurred, otherwise non-zero
  4299. See also        VF_square,  VF_cubic,  VF_sqrt,  VF_pow,  VF_ipow,  VF_poly
  4300.  
  4301.  
  4302. ┌────────────────────────────────────────────────────────────────────────────┐
  4303. │ VF_ramp                  VD_ramp                  VE_ramp                  │
  4304. │ VCF_ramp                 VCD_ramp                 VCE_ramp                 │
  4305. │ VI_ramp             VSI_ramp            VLI_ramp            VQI_ramp       │
  4306. │ VU_ramp             VUS_ramp            VUL_ramp            VUI_ramp       │
  4307. └────────────────────────────────────────────────────────────────────────────┘
  4308. Function        Initialize a vector with an ascending or descending "ramp".
  4309. Syntax          #include <VFstd.h>
  4310.                 void VF_ramp(   fVector X, ui size,
  4311.                                 float Start, float Rise );
  4312.                     (similarly  VD_,  VE_,  VCF_, VCD_, VCE_, VI_,  etc.)
  4313.                 void VU_ramp(   uVector  X, ui size,
  4314.                                 unsigned Start, int Rise );
  4315.                     (similarly  VUS_,  VUL_)
  4316. Description     Xi  =  Start + i * Rise
  4317.                 For the floating-point versions, remember the limited accuracy
  4318.                 of floating-point numbers. For example, after calling
  4319.                     VF_ramp( F1, 101, -1.0, 0.01 );
  4320.                 the element F1[100] will not be 0.0, as you might wish, but
  4321.                 rather something like 2.2E-8. Ths is due to the fact that
  4322.                 the number 0.01 (passed as a float to the function) is not
  4323.                 exactly representable in the data type float. If that is a
  4324.                 problem, consider building the ramp with moderately large
  4325.                 integers and dividing by a scaling factor afterwards:
  4326.                      VF_ramp( F1, 101, -100.0, 1.0 );
  4327.                      VF_divC( F1, F1, 101, 100.0 );
  4328.                 Note that Rise is defined as int instead of unsigned in the
  4329.                 VU_ version and as long instead of unsigned long in the VUL_
  4330.                 version; this exception from the general rules - that all
  4331.                 parameters in one function be of the same data type - allows
  4332.                 to create descending ramps of unsigned numbers, which
  4333.                 would not be possible otherwise.
  4334. Error handling  floating-point versions: none;
  4335.                 integer versions:  see chapter 5.2.
  4336. Return value    none
  4337. See also        VF_Parzen, VF_Welch, VF_equ1, VF_random
  4338.  
  4339.  
  4340. ┌────────────────────────────────────────────────────────────────────────────┐
  4341. │ VF_random                VD_random                VE_random                │
  4342. │ VI_random           VSI_random          VLI_random          VQI_random     │
  4343. │ VU_random           VUS_random          VUL_random          VUI_random     │
  4344. └────────────────────────────────────────────────────────────────────────────┘
  4345. Function        High-quality random numbers
  4346. Syntax          #include <VFstd.h>
  4347.                 long  VF_random( fVector X, ui siz, long seed,
  4348.                                  float MinVal, float MaxVal );
  4349. Description     The X vector is filled with a sequence of random numbers.
  4350.                 Within the ranges defined by MinVal and MaxVal, and within the
  4351.                 restrictions of floating-point representation, all numbers are
  4352.                 equally probable (including the extreme values themselves),
  4353.                 i.e., so-called "uniform deviates" are produced. The parameter
  4354.                 seed may be any number. Successive calls to one and the same
  4355.                 of these functions will yield identical sequences, if seed is
  4356.                 chosen equal; if seed is chosen differently for successive
  4357.                 calls, the results will be uncorrelated.
  4358.  
  4359.                 Internally, these functions employ a 32-bit integer random
  4360.                 number generator by H.W.Lewis, with additional steps (so-
  4361.                 called "Bays-Durham shuffle") to break sequential
  4362.                 correlations. This ensures very good randomness, far superior
  4363.                 to simpler generators (like the rand function shipped with
  4364.                 Borland C++).
  4365.  
  4366.                 A long value is returned which may be used as new seed for
  4367.                 subsequent calls.
  4368. Error handling  none
  4369. Return value    last 32-bit random number generated; this may be used as a new
  4370.                 seed value for future calls.
  4371. See also        rand, srand, random, VF_noise
  4372.  
  4373.  
  4374. ┌────────────────────────────────────────────────────────────────────────────┐
  4375. │ VF_ratinterpol           VD_ratinterpol           VE_ratinterpol           │
  4376. └────────────────────────────────────────────────────────────────────────────┘
  4377. Function        Diagonal-rational interpolation
  4378. Syntax          #include <VFmath.h>
  4379.                 void  VF_ratinterpol(
  4380.                                 fVector Y, fVector X, ui sizex,
  4381.                                 fVector XTab, fVector YTab, ui sizetab,
  4382.                                 unsigned deg );
  4383. Description     For each of the sizex elements of X, the corresponding element
  4384.                 of Y is interpolated from the XTab-YTab value pairs. XTab must
  4385.                 be ordered (either ascending or descending). All values of
  4386.                 XTab must be distinct; otherwise a division by zero may occur
  4387.                 and lead to a program abort. The parameter deg denotes the
  4388.                 number of points that will be taken into account for the
  4389.                 interpolation; the diagonal rational interpolation scheme by
  4390.                 Stoer and Bulirsch is used. The interpolating function is
  4391.                 formed by the quotient of two polynomials, the polynomial in
  4392.                 the denominator being of the same order (for even deg) or of
  4393.                 an order higher by one (for odd deg) than the polynomial of
  4394.                 the numerator.
  4395.                 Diagonal rational interpolation is superior to polynomial
  4396.                 interpolation, especially in the presence of poles. It is,
  4397.                 however, much slower.
  4398.                 deg must be between 3 and 20.
  4399. Error handling  A pole (infinity) in the interpolated function is recognized
  4400.                 and leads to a SING error with the proposed result being
  4401.                 ±HUGE_VAL. (Note: the x-value passed to _matherr is the first
  4402.                 element of XTab). Trying to use too many elements for the
  4403.                 interpolation (deg > 20) leads to an error message "Not
  4404.                 possible with more than 20 elements" and to a program abort.
  4405.                 If deg is not between 3 and 20, or exceeds sizetab, an error
  4406.                 message "Invalid parameter(s)" is displayed and the program
  4407.                 aborted.
  4408. Return value    none
  4409. See also        VF_polyinterpol, VF_splineinterpol
  4410.  
  4411.  
  4412. ┌────────────────────────────────────────────────────────────────────────────┐
  4413. │ VF_read                  VD_read                  VE_read                  │
  4414. │ VCF_read                 VCD_read                 VCE_read                 │
  4415. │ VI_read             VSI_read            VLI_read            VQI_read       │
  4416. │ VU_read             VUS_read            VUL_read            VUI_read       │
  4417. └────────────────────────────────────────────────────────────────────────────┘
  4418. Function        reads a vector in ASCII format from a stream
  4419. Syntax          #include <VFstd.h>
  4420.                 VF_read( fVector X, ui size, FILE *stream );
  4421. Description     size elements are read in ASCII format (up to 80 characters)
  4422.                 from stream and stored in X. Normally, this function will be
  4423.                 used to import vectors from a program which cannot store
  4424.                 numbers in machine format. It can also be used to retrieve
  4425.                 vectors previously stored by VF_write. For storing and
  4426.                 retrieving intermediate results, however, the function pair
  4427.                 VF_store / VF_recall  is to be preferred over  VF_write /
  4428.                 VF_read  (see VF_write).
  4429.  
  4430.                 The entries to be read must be separated by whitespace
  4431.                 (' ', '\n', or '\t'). Additionally, one (!) "non-whitespace"
  4432.                 character is tolerated after each entry, if it follows
  4433.                 directly after the last digit. After it, there must be one
  4434.                 or more whitespace characters.
  4435.  
  4436.                 Complex versions:
  4437.                       Real und imaginary parts may (but need not) be enclosed
  4438.                       in braces { }. However, you must be consequent: Either
  4439.                       all or no element may be written with braces.
  4440.  
  4441.                 Whole-number versions except VQI_nread:
  4442.                        By default, the numbers to be read are interpreted
  4443.                        as decimal numbers. You may use V_setRadix to define
  4444.                        any radix between 2 and 36.
  4445. Error handling  Real, complex and quad versions:
  4446.                       Overflowing numbers are silently truncated to
  4447.                       ±HUGE_VAL.
  4448.                  Whole-number versions except VQI_read:
  4449.                       As long as the numbers can be represented as long or
  4450.                       unsigned long, overflowing bits are ignored in the
  4451.                       16-bit versions.
  4452.                       Numbers beyond the long range yield -1 (signed types)
  4453.                       or +HUGE_VAL (unsigned types).
  4454. Return value    none
  4455. See also        VF_nread, VF_write, VF_store, VF_recall, strtod, strtol
  4456.  
  4457.  
  4458. ┌────────────────────────────────────────────────────────────────────────────┐
  4459. │ VCF_real                 VCD_real                 VCE_real                 │
  4460. └────────────────────────────────────────────────────────────────────────────┘
  4461. Function        Extracts the real part from a complex vector. Implemented as
  4462.                 macros calling VF_CtoRe, VD_CtoRe, or VE_CtoRe, resp.
  4463.                 See these functions for details.
  4464.  
  4465.  
  4466. ┌────────────────────────────────────────────────────────────────────────────┐
  4467. │ VF_recall                VD_recall                VE_recall                │
  4468. │ VCF_recall               VCD_recall               VCE_recall               │
  4469. │ VI_recall           VSI_recall          VLI_recall          VQI_recall     │
  4470. │ VU_recall           VUS_recall          VUL_recall          VUI_recall     │
  4471. └────────────────────────────────────────────────────────────────────────────┘
  4472. Function        Read a vector in binary format from a stream
  4473. Syntax          #include <VFstd.h>
  4474.                 VF_recall( fVector X, ui size, FILE *stream );
  4475. Description     size elements of X are read from stream in binary format.
  4476.                 Normally, these functions are used to retrieve data stored by
  4477.                 the respective function of the VF_store family.
  4478. Error handling  none
  4479. Return value    none
  4480. See also        fwrite,  fread,  VF_store, VF_write, VF_print
  4481.  
  4482.  
  4483. ┌────────────────────────────────────────────────────────────────────────────┐
  4484. │ VF_redC                  VD_redC                  VE_redC                  │
  4485. └────────────────────────────────────────────────────────────────────────────┘
  4486. Function        "Reduce"  by a constant
  4487. Syntax          #include <VFmath.h>
  4488.                 void VF_redC( fVector Y, fVector X, ui size, float C );
  4489. Description     Yi  =   red( Xi, C )  =  Xi * C / (Xi + C)
  4490.                 Expressions of this type are frequently used in physics; for
  4491.                 example, the "reduced mass" of a two-body system is the
  4492.                 product of both masses divided by their sum.
  4493. Error handling  none
  4494. Return value    none
  4495. See also        VF_redV,  VF_addC,  VF_subC,  VF_divC,  VF_visC
  4496.  
  4497.  
  4498. ┌────────────────────────────────────────────────────────────────────────────┐
  4499. │ VF_redV                  VD_redV                  VE_redV                  │
  4500. │ VFx_redV                 VDx_redV                 VEx_redV                 │
  4501. └────────────────────────────────────────────────────────────────────────────┘
  4502. Function        "Reduce" by corresponding vector elements
  4503. Syntax          #include <VFmath.h>
  4504.                 void  VF_redV(  fVector  Z,  fVector  X,  fVector  Y,
  4505.                                 ui size );
  4506.                 void  VFx_redV( fVector  Z,  fVector  X,  fVector  Y,
  4507.                                 ui size, float  A,  float  B );
  4508. Description     normal versions:      Zi =  red( Xi, Yi )
  4509.                                          =  Xi * Yi / (Xi + Yi)
  4510.                 expanded versions:    xi =  (A * Xi + B),
  4511.                                       Zi =  red( xi, Yi )
  4512. Error handling  none
  4513. Return value    none
  4514. See also        VF_redC,  VF_addV,  VF_subV,  VF_divV,  VF_visV
  4515.  
  4516.  
  4517. ┌────────────────────────────────────────────────────────────────────────────┐
  4518. │ VF_reflect               VD_reflect               VE_reflect               │
  4519. │ VCF_reflect              VCD_reflect              VCE_reflect              │
  4520. └────────────────────────────────────────────────────────────────────────────┘
  4521. Function        Derive the second half of a vector from the first half by
  4522.                 reflection at the midpoint.
  4523. Syntax          #include <VFstd.h>
  4524.                 void  VF_reflect( fVector X, ui size );
  4525. Description     X[size-i-1] =  X[i],   i=0,...,(size-1)/2
  4526.                 The elements of the lower half of a vector are copied in
  4527.                 reverse order into the upper half, i.e., the zeroth element is
  4528.                 copied to the last, the element number 1 to the second last,
  4529.                 and so on. The elements of the first half are not affected by
  4530.                 this operation. This function will be used, e.g., to construct
  4531.                 a response function for convolutions (see VF_convolve). In
  4532.                 this case, note that the zeroth element is to appear only once
  4533.                 in the response function and must not be included in the
  4534.                 reflection by VF_reflect. Therefore, you have to calculate
  4535.                 the response function for size/2+1 elements and to apply
  4536.                 reflection from element 1 on. For an example, see VF_convolve.
  4537. Error handling  none
  4538. Return value    none
  4539. See also        VF_rotate, VF_rev, VF_convolve, VF_deconvolve, VF_filter
  4540.  
  4541.  
  4542. ┌────────────────────────────────────────────────────────────────────────────┐
  4543. │ VF_ReImtoC               VD_ReImtoC               VE_ReImtoC               │
  4544. └────────────────────────────────────────────────────────────────────────────┘
  4545. Function        Construct a complex vector from real and imaginary parts
  4546. Syntax          #include <VCFstd.h>
  4547.                 void VF_ReImtoC( cfVector Y, fVector Re, fVector Im,
  4548.                                  ui size );
  4549. Description     The complex vector Y is constructed from two real vectors that
  4550.                 become the real and imaginary parts of Y.
  4551. Error handling  none
  4552. Return value    none
  4553. See also        VF_CtoReIm, VF_RetoC, VF_PolartoC
  4554.  
  4555.  
  4556. ┌────────────────────────────────────────────────────────────────────────────┐
  4557. │ VF_RetoC                 VD_RetoC                 VE_RetoC                 │
  4558. └────────────────────────────────────────────────────────────────────────────┘
  4559. Function        Overwrite the real part of a complex vector with a real vector
  4560. Syntax          #include <VCFstd.h>
  4561.                 void VF_RetoC( cfVector Y, fVector Re, ui size );
  4562. Description     The real part of the complex vector Y is overwritten with the
  4563.                 elements of the real-valued vector Re. The imaginary part of Y
  4564.                 is not affected.
  4565. Error handling  none
  4566. Return value    none
  4567. See also        VF_CtoReIm, VF_ReImtoC,  VF_ImtoC, VF_PolartoC
  4568.  
  4569.  
  4570. ┌────────────────────────────────────────────────────────────────────────────┐
  4571. │ VF_rev                   VD_rev                   VE_rev                   │
  4572. │ VCF_rev                  VCD_rev                  VCE_rev                  │
  4573. │ VI_rev              VSI_rev             VLI_rev             VQI_rev        │
  4574. │ VU_rev              VUS_rev             VUL_rev             VUI_rev        │
  4575. └────────────────────────────────────────────────────────────────────────────┘
  4576. Function        Reverse the ordering of the elements of a vector
  4577. Syntax          #include <VFstd.h>
  4578.                 void  VF_rev( fVector Y, fVector X, ui size );
  4579. Description     Y[i] = X[size-i-1]
  4580. Error handling  none
  4581. Return value    none
  4582. See also        VF_reflect, VF_rotate
  4583.  
  4584.  
  4585. ┌────────────────────────────────────────────────────────────────────────────┐
  4586. │ VF_rms                   VD_rms                   VE_rms                   │
  4587. └────────────────────────────────────────────────────────────────────────────┘
  4588. Function        Root of the mean square
  4589. Syntax          #include <VFstd.h>
  4590.                 float VF_rms( fVector X, ui size );
  4591. Description     rms = sqrt( (1/size) * sum( Xi² ) )
  4592. Error handling  none
  4593. Return value    rms
  4594. See also        VF_ssq, VF_Euclid, VF_mean
  4595.  
  4596.  
  4597. ┌────────────────────────────────────────────────────────────────────────────┐
  4598. │ VF_rotate                VD_rotate                VE_rotate                │
  4599. │ VCF_rotate               VCD_rotate               VCE_rotate               │
  4600. │ VI_rotate           VSI_rotate          VLI_rotate          VQI_rotate     │
  4601. │ VU_rotate           VUS_rotate          VUL_rotate          VUI_rotate     │
  4602. └────────────────────────────────────────────────────────────────────────────┘
  4603. Function        Rotate the ordering of the elements of a vector
  4604. Syntax          #include <VFstd.h>
  4605.                 void  VF_rotate(  fVector Y, fVector X, ui size,  int  pos );
  4606. Description     Y[i]  = X[size-pos+i],   i=0,..,pos-1
  4607.                 Y[i]  = X[i-pos],        i=pos,..,size-1
  4608.                 The output vector equals the rotated input vector. Clockwise
  4609.                 rotation is achieved by a positive number pos.
  4610. Error handling  none
  4611. Return value    none
  4612. See also        VF_reflect, VF_rev
  4613.  
  4614.  
  4615. ┌────────────────────────────────────────────────────────────────────────────┐
  4616. │ VF_round                 VD_round                 VE_round                 │
  4617. │ VF_roundtoI              VD_roundtoI              VE_roundtoI              │
  4618. │ VF_roundtoSI             VD_roundtoSI             VE_roundtoSI             │
  4619. │ VF_roundtoLI             VD_roundtoLI             VE_roundtoLI             │
  4620. │ VF_roundtoQI             VD_roundtoQI             VE_roundtoQI             │
  4621. │ VF_roundtoU              VD_roundtoU              VE_roundtoU              │
  4622. │ VF_roundtoUS             VD_roundtoUS             VE_roundtoUS             │
  4623. │ VF_roundtoUL             VD_roundtoUL             VE_roundtoUL             │
  4624. │ VF_roundtoUI             VD_roundtoUI             VE_roundtoUI             │
  4625. └────────────────────────────────────────────────────────────────────────────┘
  4626. Function        Rounding to the nearest whole number.
  4627. Syntax          #include <VFmath.h>
  4628.                 int VF_round(     fVector Y,  fVector X,  ui size );
  4629.                 int VF_roundtoI(  iVector Y,  fVector X,  ui size );
  4630.                 int VF_roundtoLI( liVector Y, fVector X, ui size );
  4631.                    (similarly  all other functions of this family)
  4632. Description     Each element of X is rounded to the nearest integer value. In
  4633.                 case of a fractional part of exactly 0.5, the nearest even
  4634.                 integer value is chosen and stored in Y. For example, 2.5 is
  4635.                 rounded to 2, and 3.5 is rounded to 4.
  4636.                 The functions VF_roundtoI, VF_roundtoLI, VF_roundtoU, etc.
  4637.                 convert the result into the various integer data types.
  4638. Error handling  OVERFLOW errors are handled by setting the result to the
  4639.                 extreme value possible. Negative numbers in the versions
  4640.                 VF_roundtoU, VF_roundtoUS, VF_roundtoUL, and VF_roundtoUI
  4641.                 lead to DOMAIN errors; they are handled by setting the result
  4642.                 to 0.
  4643. Return value    Returns 0, if no error occurred, otherwise non-zero.
  4644. See also        round,  floor, VF_round,  VF_floor, VF_chop, VF_trunc
  4645.  
  4646.  
  4647. ┌────────────────────────────────────────────────────────────────────────────┐
  4648. │ VF_runintegralC          VD_runintegralC          VE_runintegralC          │
  4649. └────────────────────────────────────────────────────────────────────────────┘
  4650. Function        "running integral" of an array sampled at equally-spaced
  4651.                 abscissa points.
  4652. Syntax          #include <VFstd.h>
  4653.                 void  VF_runintegralC(  fVector  Y,  fVector  X,
  4654.                                         ui size,  float DeltaT );
  4655. Description     The vector X is assumed to be a function of a variable t; the
  4656.                 t values themselves are equally spaced. Therefore, only their
  4657.                 spacing, DeltaT, must be known to the function. Each element
  4658.                 of Y is the integral of all elements of X up to and including
  4659.                 the one with the same index. Thus, the last element of Y
  4660.                 contains the value of the integral over the whole of X (the
  4661.                 area under X). If only this value is of interest, VF_integralC
  4662.                 should be used.
  4663. Error handling  none
  4664. Return value    none
  4665. See also        VF_runintegralV,  VF_integralC,  VF_derivC,  VF_runsum
  4666.  
  4667.  
  4668. ┌────────────────────────────────────────────────────────────────────────────┐
  4669. │ VF_runintegralV          VD_runintegralV          VE_runintegralV          │
  4670. └────────────────────────────────────────────────────────────────────────────┘
  4671. Function        "running integral"
  4672. Syntax          #include <VFmath.h>
  4673.                 void  VF_runintegralV(  fVector Z,  fVector  X,
  4674.                                         fVector  Y,  ui size );
  4675. Description     Y is a function of the variable x which is represented by X.
  4676.                 Each element of Z is the integral over all elements of Y up to
  4677.                 and including the one with the same index. The first element
  4678.                 of Z is always 0.0.  The last element of Z is equal to the
  4679.                 value of the integral, i.e. to the area under Y. If only this
  4680.                 value of the integral is of interest, VF_integralV should be
  4681.                 used.
  4682. Error handling  none
  4683. Return value    none
  4684. See also        VF_runintegralC,  VF_integralV,  VF_derivV
  4685.  
  4686.  
  4687. ┌────────────────────────────────────────────────────────────────────────────┐
  4688. │ VF_runmax                VD_runmax                VE_runmax                │
  4689. │ VI_runmax           VSI_runmax          VLI_runmax          VQI_runmax     │
  4690. │ VU_runmax           VUS_runmax          VUL_runmax          VUI_runmax     │
  4691. └────────────────────────────────────────────────────────────────────────────┘
  4692. Function        "running" maximum.
  4693. Syntax          #include <VFstd.h>
  4694.                 void  VF_runmax( fVector Y, fVector X, ui size );
  4695. Description     Each element of Y is the maximum of the corresponding and all
  4696.                 preceding elements of X.
  4697. Error handling  none
  4698. Return value    none
  4699. See also        VF_max, VF_runmin, VF_runsum
  4700.  
  4701.  
  4702. ┌────────────────────────────────────────────────────────────────────────────┐
  4703. │ VF_runmin                VD_runmin                VE_runmin                │
  4704. │ VI_runmin           VSI_runmin          VLI_runmin          VQI_runmin     │
  4705. │ VU_runmin           VUS_runmin          VUL_runmin          VUI_runmin     │
  4706. └────────────────────────────────────────────────────────────────────────────┘
  4707. Function        "running" minimum
  4708. Syntax          #include <VFstd.h>
  4709.                 void  VF_runmin( fVector Y, fVector X, ui size );
  4710. Description     Each element of Y is the minimum of the corresponding and all
  4711.                 preceding elements of X.
  4712. Error handling  none
  4713. Return value    none
  4714. See also        VF_min, VF_runmax, VF_runsum
  4715.  
  4716.  
  4717. ┌────────────────────────────────────────────────────────────────────────────┐
  4718. │ VF_runprod               VD_runprod               VE_runprod               │
  4719. │ VCF_runprod              VCD_runprod              VCE_runprod              │
  4720. └────────────────────────────────────────────────────────────────────────────┘
  4721. Function        "running" product
  4722. Syntax          #include <VFstd.h>
  4723.                 void  VF_runprod( fVector Y, fVector X, ui size );
  4724. Description     Each element of Y is the product of the corresponding and all
  4725.                 preceding elements of X. This function should be used with
  4726.                 care: overflow is easily reached, and underflow may lead to
  4727.                 all elements from a certain position on being zero.
  4728. Error handling  none
  4729. Return value    none
  4730. See also        VF_prod, VF_runsum
  4731.  
  4732.  
  4733. ┌────────────────────────────────────────────────────────────────────────────┐
  4734. │ VF_runsum                VD_runsum                VE_runsum                │
  4735. │ VCF_runsum               VCD_runsum               VCE_runsum               │
  4736. │ VI_runsum           VSI_runsum          VLI_runsum          VQI_runsum     │
  4737. │ VU_runsum           VUS_runsum          VUL_runsum          VUI_runsum     │
  4738. └────────────────────────────────────────────────────────────────────────────┘
  4739. Function        "running" sum
  4740. Syntax          #include <VFstd.h>
  4741.                 void  VF_runsum( fVector Y, fVector X, ui size );
  4742. Description     Each element of Y is the sum of the corresponding and all
  4743.                 preceding elements of X.
  4744. Error handling  none (but be careful: this function may easily overflow!)
  4745. Return value    none
  4746. See also        VF_sum, VF_runprod
  4747.  
  4748.  
  4749. ┌────────────────────────────────────────────────────────────────────────────┐
  4750. │ VF_scale10               VD_scale10               VE_scale10               │
  4751. └────────────────────────────────────────────────────────────────────────────┘
  4752. Function        Scaling by an integer power of 10.
  4753. Syntax          #include <VFmath.h>
  4754.                 int  VF_scale10( fVector Y,  fVector X,  ui size, int expo );
  4755. Description     Yi  =  Xi * (10 ** expo)
  4756.                 Notice that higher powers of ten are not representable as
  4757.                 exact numbers, which may lead to the introduction of round-off
  4758.                 error by the scaling. If this is a problem, VF_scale2  should
  4759.                 be used instead.
  4760. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  4761. Return value    0, if no error occurred, otherwise non-zero
  4762. See also        VF_scale2,  VF_mantexp,  ldexp
  4763.  
  4764.  
  4765. ┌────────────────────────────────────────────────────────────────────────────┐
  4766. │ VF_scale2                VD_scale2                VE_scale2                │
  4767. └────────────────────────────────────────────────────────────────────────────┘
  4768. Function        Scaling by an integer power of  2.
  4769. Syntax          #include <VFmath.h>
  4770.                 int VF_scale2( fVector Y, fVector X, ui size, int expo );
  4771. Description     Yi  =  Xi  *  (2 ** expo)
  4772. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  4773. Return value    0, if no error occurred, otherwise non-zero
  4774. See also        VF_scale10,  VF_mantexp,  ldexp
  4775.  
  4776.  
  4777. ┌────────────────────────────────────────────────────────────────────────────┐
  4778. │ VF_scalprod              VD_scalprod              VE_scalprod              │
  4779. └────────────────────────────────────────────────────────────────────────────┘
  4780. Function        Scalar product of two vectors
  4781. Syntax          #include <VFstd.h>
  4782.                 float VF_scalprod( fVector X, fVector Y, ui size );
  4783. Description     scalprod  =  sum( Xi * Yi )
  4784.                 The scalar (or dot) product of two vectors is defined as the
  4785.                 sum of the products of the corresponding elements. The scalar
  4786.                 product of a vector with itself is the square of its magnitude
  4787.                 and may be calculated using the function VF_ssq.
  4788. Error handling  none
  4789. Return value    scalar product
  4790. See also        VF_prod,  VF_xprod, VF_sum, VF_ssq
  4791.  
  4792.  
  4793. ┌────────────────────────────────────────────────────────────────────────────┐
  4794. │ VF_searchC               VD_searchC               VE_searchC               │
  4795. └────────────────────────────────────────────────────────────────────────────┘
  4796. Function        Binary searches of an ordered table for the entry coming
  4797.                 closest to a specified value
  4798. Syntax          #include <VFstd.h>
  4799.                 ui VF_searchC( fVector X, ui size, float C, int mode );
  4800. Description     In a binary search, the element of X is located that is
  4801.                 closest to the value specified as C. X has to be an ordered
  4802.                 table (either ascending or descending); if this condition is
  4803.                 not fulfilled, the result will be wrong. If C is outside the
  4804.                 range covered by X, the first or the last element of X is
  4805.                 chosen, whichever is closer to C. If C is within the range of
  4806.                 the table, three modes of the search are available:
  4807.                 mode =  +1:  find the next element greater than or equal to C
  4808.                 mode =   0:  find the element closest to C; if two elements
  4809.                              are within equal distance, choose the lower index
  4810.                 mode =  -1:  find the next element less than or equal to C
  4811. Error handling  none
  4812. Return value    index of the element found.
  4813. See also        VF_searchV,  VF_sort, VF_polyinterpol
  4814.  
  4815.  
  4816. ┌────────────────────────────────────────────────────────────────────────────┐
  4817. │ VF_searchV               VD_searchV               VE_searchV               │
  4818. └────────────────────────────────────────────────────────────────────────────┘
  4819. Function        Binary search of an ordered table for the entries coming
  4820.                 closest to the values specified as the elements of a vector
  4821. Syntax          #include <VFstd.h>
  4822.                 void VF_searchV( uiVector Ind, fVector X, ui sizex,
  4823.                                  fVector Tab, ui sizetab, int mode );
  4824. Description     For each element of X, the element of the ordered table Tab is
  4825.                 located that is closest to it. If Xi is outside the range of
  4826.                 the table, the first or the last element of the table is
  4827.                 chosen, whichever is appropriate. Otherwise, three modes of
  4828.                 the search are available:
  4829.                 mode =  +1:  find the next element greater than or equal to Xi
  4830.                 mode =   0:  find the element closest to Xi; if two elements
  4831.                              are within equal distance, choose the lower index
  4832.                 mode =  -1:  find the next element less than or equal to Xi
  4833.  
  4834.                 sizex is the number of elements of X and of Ind, whereas
  4835.                 sizetab denotes the number of elements of the table Tab.
  4836. Error handling  none
  4837. Return value    none
  4838. See also        VF_searchC, VF_indpick, VF_sortind, VF_polyinterpol
  4839.  
  4840.  
  4841. ┌────────────────────────────────────────────────────────────────────────────┐
  4842. │ VF_sec                   VD_sec                   VE_sec                   │
  4843. │ VFx_sec                  VDx_sec                  VEx_sec                  │
  4844. └────────────────────────────────────────────────────────────────────────────┘
  4845. Function        Secant function
  4846. Syntax          #include <VFmath.h>
  4847.                 int  VF_sec(  fVector  Y,  fVector  X, ui size );
  4848.                 int  VFx_sec( fVector  Y,  fVector  X, ui size,
  4849.                               float A,  float B,  float C );
  4850. Description     normal versions:    Yi  =  sec( Xi )
  4851.                                         =  1 / cos( Xi )
  4852.                 expanded versions:  Yi  =  C * sec( A*Xi+B )
  4853.                 The secant is defined as the inverse of the cosine (not to be
  4854.                 mistaken for the arcus function arccos). For large values of
  4855.                 Xi, round-off error becomes appreciable; if the Xi values are
  4856.                 representable as rational multiples of Pi, it is better to use
  4857.                 VF_secrpi  than VF_sec.
  4858. Error handling  SING or OVERFLOW errors lead to the default result ±HUGE_VAL.
  4859.                 TLOSS precision errors lead to a result of 1.0 (as if the
  4860.                 input were 0.0).
  4861. Return value    0, if no error occurred, otherwise non-zero.
  4862. See also        VF_sec2,  VF_secrpi,  VF_cos,  VF_sech,  cos
  4863.  
  4864.  
  4865. ┌────────────────────────────────────────────────────────────────────────────┐
  4866. │ VF_sec2                  VD_sec2                  VE_sec2                  │
  4867. │ VFx_sec2                 VDx_sec2                 VEx_sec2                 │
  4868. └────────────────────────────────────────────────────────────────────────────┘
  4869. Function        Square of the secant function
  4870. Syntax          #include <VFmath.h>
  4871.                 int  VF_sec2(   fVector  Y,  fVector  X, ui size );
  4872.                 int  VFx_sec2(  fVector  Y,  fVector  X, ui size,
  4873.                                 float A,  float B,  float C );
  4874. Description     normal versions:     Yi = sec²( Xi )
  4875.                 expanded versions:   Yi = C * sec²( A*Xi+B )
  4876.                 Calculating the squared trigonometric functions directly is
  4877.                 faster and sometimes more accurate than first calculating the
  4878.                 trigonometric function itself and squaring it afterwards.
  4879. Error handling  For SING and OVERFLOW errors, the default result is HUGE_VAL
  4880.                 (multiplied by the sign of C in the expanded versions);
  4881.                 TLOSS errors lead to a default result of 1.0 or C, resp. (as
  4882.                 if the input were 0.0).
  4883. Return value    0, if no error occurred, otherwise non-zero.
  4884. See also        VF_sec,   VF_secrpi,   sin
  4885.  
  4886.  
  4887. ┌────────────────────────────────────────────────────────────────────────────┐
  4888. │ VF_sech                  VD_sech                  VE_sech                  │
  4889. │ VFx_sech                 VDx_sech                 VEx_sech                 │
  4890. └────────────────────────────────────────────────────────────────────────────┘
  4891. Function        Hyperbolic secant function
  4892. Syntax          #include <VFmath.h>
  4893.                 int  VF_sech(   fVector  Y,  fVector  X, ui size );
  4894.                 int  VFx_sech(  fVector  Y,  fVector  X, ui size,
  4895.                                 float A, float B, float C );
  4896. Description     normal versions:     Yi  =  sech( Xi )
  4897.                                          =  2 / (exp( Xi ) + exp( -Xi ))
  4898.                 expanded versions:   Yi  =  C * sech( A*Xi+B )
  4899. Error handling  These functions should be error-proof.
  4900. Return value    always 0
  4901. See also        VF_sinh,  VF_sech2, VF_exp,   sinh
  4902.  
  4903.  
  4904. ┌────────────────────────────────────────────────────────────────────────────┐
  4905. │ VF_sech2                 VD_sech2                 VE_sech2                 │
  4906. │ VFx_sech2                VDx_sech2                VEx_sech2                │
  4907. └────────────────────────────────────────────────────────────────────────────┘
  4908. Function        Square of the hyperbolic secant function
  4909. Syntax          #include <VFmath.h>
  4910.                 int  VF_sech2(   fVector  Y,  fVector  X, ui size );
  4911.                 int  VFx_sech2(  fVector  Y,  fVector  X, ui size,
  4912.                                  float A, float B, float C );
  4913. Description     normal versions:      Yi =  sech²( Xi )
  4914.                 expanded versions:    Yi =  C * sech²( A*Xi+B )
  4915.                 The sech² function is used in physics, e.g., to describe the
  4916.                 shape of ultrashort light pulses. Compared to a Gaussian or
  4917.                 Lorentzian pulse shape of the same autocorrelation width (see
  4918.                 VF_autocorr), the sech² function has the smallest FWHM (full
  4919.                 width to half maximum).
  4920. Error handling  These functions should be error-proof.
  4921. Return value    always 0
  4922. See also        VF_sech,  VF_sinh, VF_exp,   VF_Gauss,  VF_Lorentz
  4923.  
  4924.  
  4925. ┌────────────────────────────────────────────────────────────────────────────┐
  4926. │ VF_secrpi                VD_secrpi                VE_secrpi                │
  4927. │ VF_secrpi2               VD_secrpi2               VE_secrpi2               │
  4928. │ VF_secrpi3               VD_secrpi3               VE_secrpi3               │
  4929. └────────────────────────────────────────────────────────────────────────────┘
  4930. Function        Secant function of fractional multiples of Pi
  4931. Syntax          #include <VFmath.h>
  4932.                 int  VF_secrpi(  fVector Y, iVector P, ui size, int q );
  4933.                 int  VF_secrpi2( fVector Y, iVector P, ui size, int q );
  4934.                 int  VF_secrpi3( fVector Y, iVector P, ui size, int q );
  4935. Description     Yi  =  sec( (P[i] / q) * Pi )
  4936.                 The secant of fractional multiples of Pi is calculated. There
  4937.                 are three versions: VF_secrpi is for general use with any
  4938.                 arbitrary denominator q. If q is a power of 2,  VF_secrpi2
  4939.                 should be used which is a highly optimized version utilizing a
  4940.                 look-up table. If q is a multiple of 3,  VF_secrpi3 should be
  4941.                 used. VF_secrpi2 and VF_secrpi3 work also with q values they
  4942.                 are not optimized for; in this case, however, memory space is
  4943.                 wasted for the tables.
  4944. Error handling  SING errors occur if P[i] / q  is an odd multiple of ½; the
  4945.                 default result is 0.0 (which is the mean of +HUGE_VAL and
  4946.                 -HUGE_VAL; similarly to VF_cosecrpi2, 0.0 is chosen irrespec-
  4947.                 tive to the fact that it is not a valid result of the secant
  4948.                 function!);
  4949.                 q must be non-zero; this is, however, not tested for.
  4950. Return value    0, if no error occurred, otherwise non-zero.
  4951. See also        VF_sec,   cos
  4952.  
  4953.  
  4954. ┌────────────────────────────────────────────────────────────────────────────┐
  4955. │ VF_selected_mean         VD_selected_mean         VE_selected_mean         │
  4956. └────────────────────────────────────────────────────────────────────────────┘
  4957. Function        Mean of the elements of a one-dimensional distribution,
  4958.                 falling into a specified interval
  4959. Syntax          #include <VFstd.h>
  4960.                 float  VF_selected_mean( ui *nsel, fVector  X, ui size
  4961.                                          float XMin, float XMax );
  4962. Description     Those elements of X are selected, which fall into the interval
  4963.                       XMin <= Xi <= XMax.
  4964.                 Their mean is calculated, and the number of selected elements
  4965.                 is stored at the address nsel. If this number is not needed,
  4966.                 nsel may be passed to the function as NULL.
  4967. Error handling  none
  4968. Return value    Mean of the selected vector elements
  4969. See also        VF_mean
  4970.  
  4971.  
  4972. ┌────────────────────────────────────────────────────────────────────────────┐
  4973. │ V_setCoordSystem                                                           │
  4974. └────────────────────────────────────────────────────────────────────────────┘
  4975. Function        Restore the scalings and position of a coordinate
  4976.                 system previously saved by V_getCoordSystem
  4977. Syntax          #include <Vgraph.h>
  4978.                 void V_setCoordSystem( VCOORDSYSTEM *csys );
  4979. Description     If one wants to "hop" between several coordinate systems,
  4980.                 displayed in one and the same window, one has to store the
  4981.                 specifications (position and scalings) of each coordinate
  4982.                 system separately, using V_getCoordSystem, and to retrieve
  4983.                 them as needed, using this function.
  4984.                 The address of a struct VCOORDSYSTEM is passed as the
  4985.                 argument. VCOORDSYSTEM is defined in <Vgraph.h>.
  4986.                 For an example, see V_getCoordSystem.
  4987. Error handling  none
  4988. Return value    none
  4989. See also        V_getCoordSystem, V_setPlotRegion, V_continuePlot
  4990.  
  4991.  
  4992. ┌────────────────────────────────────────────────────────────────────────────┐
  4993. │ V_setErrorEventFile                                                        │
  4994. └────────────────────────────────────────────────────────────────────────────┘
  4995. Function        Prepare a file for printing error messages into it
  4996. Syntax          #include <VecLib.h>
  4997.                 void  V_setErrorEventFile(
  4998.                                 char *filename,
  4999.                                 unsigned ScreenAndFile );
  5000. Description     This function determines where to print messages notifying
  5001.                 math errors that occur within VectorLib routines. filename is
  5002.                 the desired name of the event file (often called "log-file").
  5003.                 ScreenAndFile decides if you wish to have error messages
  5004.                 printed simultaneously into the file and onto the screen
  5005.                 (ScreenAndFile > 0)  or exclusively into the file
  5006.                 (ScreenAndFile = 0).
  5007.                 If a user-defined _matherr function calls V_noteError,
  5008.                 also errors occurring outside VectorLib routines will lead to
  5009.                 a message printed into the event file (see Chapter 5.5). This
  5010.                 function will not be included in versions of VectorLib for
  5011.                 compilers which offer the possibility of printing error
  5012.                 messages simultaneously to the screen and into an event file.
  5013.  
  5014.                 The default, i.e., printing error messages to the screen, is
  5015.                 restored by V_closeErrorEventFile.
  5016. Error handling  If the desired event file cannot be opened or created, the
  5017.                 program is aborted with a message "Cannot open error event
  5018.                 file".
  5019. Return value    none
  5020. See also        V_noteError,  V_closeErrorEventFile,  _matherr
  5021.  
  5022.  
  5023. ┌────────────────────────────────────────────────────────────────────────────┐
  5024. │ V_setLineThickness                                                         │
  5025. └────────────────────────────────────────────────────────────────────────────┘
  5026. Function        Modify the line thickness used in plotting functions
  5027. Syntax          #include <Vgraph.h>
  5028.                 void V_setLineThickness( unsigned linethickness );
  5029. Description     The line thickness used in the plotting functions
  5030.                 VF_xyAutoPlot, VCF_autoPlot, etc., is set to linethickness.
  5031.                 To reset the default value, call V_setLineThickness with
  5032.                 linethickness = 1.
  5033.                 DOS:
  5034.                    There are only two possible values for linethickness:
  5035.                    NORM_WIDTH=1 and THICK_WIDTH=3. Any value of linethickness
  5036.                    below 3 is interpreted as NORM_WIDTH, any value above 3 is
  5037.                    taken as THICK_WIDTH.
  5038.                 Windows:
  5039.                    Any value of linethickness between 1 and 500 is allowed,
  5040.                    useful values ranging from 1 to about 10. A minimum thick-
  5041.                    ness of one pixel is always secured, even if linethickness
  5042.                    is set to 0. Note that broken or dotted lines are plotted
  5043.                    accurately only with a linethicknes of 1. At higher values
  5044.                    of linethickness, all lines will look like solid lines.
  5045.                    Thicker lines are plotted considerably slower than thinner
  5046.                    ones.
  5047. Error handling  DOS: "silent" correction of the input value.
  5048.                 Windows: A value of linethickness greater than 500 leads to a
  5049.                 warning message "Cannot use line thicker than 500 pixels."
  5050.                 Program execution is continued with linethickness set to 500.
  5051. Return value    none
  5052. See also        VF_xyAutoPlot, V_setSymbolSize
  5053.  
  5054.  
  5055. ┌────────────────────────────────────────────────────────────────────────────┐
  5056. │ VF_setNWriteSeparate     VD_setNWriteSeparate     VE_setNWriteSeparate     │
  5057. │ VCF_setNWriteSeparate    VCD_setNWriteSeparate    VCE_setNWriteSeparate    │
  5058. │ VI_setNWriteSeparate     VSI_setNWriteSeparate                             │
  5059. │ VLI_setNWriteSeparate    VQI_setNWriteSeparate                             │
  5060. │ VU_setNWriteSeparate     VUS_setNWriteSeparate                             │
  5061. │ VUL_setNWriteSeparate    VUI_setNWriteSeparate                             │
  5062. └────────────────────────────────────────────────────────────────────────────┘
  5063. Function        Definition of the string to be used by the V.._nwrite
  5064.                 functions to separate table entries.
  5065. Syntax          #include <VFstd.h>
  5066.                 void VF_setNWriteSeparate( char *SepString );
  5067. Description     This function defines the character string to be inserted
  5068.                 between the columns of a table written by VF_nwrite.
  5069.                 VF_setNWriteSeparate does not influence the end of each
  5070.                 line which is always a line-feed character ("\n").
  5071.                 SepString may contain up to twelve characters. The default
  5072.                 setting is a tab character (#9).
  5073. Error handling  In the case of SepString longer than twelve characters,
  5074.                 the program is aborted with the error message
  5075.                 "Invalid Parameter(s)".
  5076.                 The contents of SepString is not checked.
  5077. Return value    none
  5078. See also        VF_setWriteFormat, VF_setWriteSeparate, VF_nwrite, VF_nread
  5079.  
  5080.  
  5081. ┌────────────────────────────────────────────────────────────────────────────┐
  5082. │ VF_setODThresh           VD_setODThresh           VE_setODThresh           │
  5083. │ VU_setODThresh           VUB_setODThresh          VUS_setODThresh          │
  5084. │ VUL_setODThresh          VQI_setODThresh                                   │
  5085. └────────────────────────────────────────────────────────────────────────────┘
  5086. Function        Set the threshold for optical density calculation
  5087. Syntax          #include <VFmath.h>
  5088.                 void  VF_setODThresh( float minX, float minX0 );
  5089. Description     As described for VF_OD and VF_ODwDark, the threshold below
  5090.                 which input numbers for these functions are regarded as
  5091.                 "experimental noise", with the OD being set to 0.0,
  5092.                 can be set to any positive number by VF_setODThresh etc.
  5093. Error handling  none
  5094. Return value    none
  5095. See also        VF_OD
  5096.  
  5097.  
  5098. ┌────────────────────────────────────────────────────────────────────────────┐
  5099. │ V_setPlotRegion                                                            │
  5100. └────────────────────────────────────────────────────────────────────────────┘
  5101. Function        Defines a screen or printer-page region to be used by
  5102.                 VectorLib plotting operations.
  5103. Syntax          #include <Vgraph.h>
  5104.                 void V_setPlotRegion( int left, int top,
  5105.                                       int right, int bottom );
  5106. Description     The rectangular region defined by the parameters, passed to
  5107.                 V_setPlotRegion, will hold the coordinate system including
  5108.                 all labels generated by future calls to VectorLib plotting
  5109.                 functions such as VF_xyAutoPlot. The parameters left, top,
  5110.                 right, and bottom are in pixels, counting from the upper
  5111.                 left corner of the screen or of the printer page.
  5112.                 V_setPlotRegion has to be called after (!) V_initPlot
  5113.                 or V_initPrint.
  5114. Error handling  none
  5115. Return value    none
  5116. See also        V_initPlot, V_initPrint
  5117.  
  5118.  
  5119. ┌────────────────────────────────────────────────────────────────────────────┐
  5120. │ V_setRadix                                                                 │
  5121. └────────────────────────────────────────────────────────────────────────────┘
  5122. Function        Define the radix for the whole-number read functions
  5123. Syntax          #include <VIstd.h>
  5124.                           /* or <VSIstd.h>, <VLIstd.h>, <VUstd.h>, ... */
  5125.                 void V_setRadix( int radix );
  5126. Description     By default, the V.._read functions for the whole-number data
  5127.                 types interpret all numbers as decimal numbers. V_setRadix
  5128.                 allows to change this default behaviour.
  5129.                 The radix set by V_setRadix will be used in VI_read, VI_nread
  5130.                 and their VSI_, VLI_, VUS_, VU_, VUL_, and VUL_ analogues.
  5131.                 It does, however, not affect VQI_read or VQI_nread (where the
  5132.                 radix is always 10).
  5133.  
  5134.                 radix may take on values between 2 and 36 or 0.
  5135.                 In the case of radix=0, the basis of each number is determined
  5136.                 at run-time:
  5137.                 All numbers beginning with the ciphers 1-9 are recognized
  5138.                 as decimal numbers.
  5139.                 All numbers beginning with "0x" are interpreted as
  5140.                 hexadecimal and all numbers beginning with "0" without "x"
  5141.                 are read as octal numbers.
  5142. Error handling  radix < 0, radix=1, or radix > 36 lead to a program abort
  5143.                 with the error message "Invalid Parameter(s)".
  5144. Return value    none
  5145. See also        VI_read, VI_nread, strtol, strtoul
  5146.  
  5147.  
  5148. ┌────────────────────────────────────────────────────────────────────────────┐
  5149. │ VF_setRspEdit            VD_setRspEdit            VE_setRspEdit            │
  5150. └────────────────────────────────────────────────────────────────────────────┘
  5151. Function        Modify the treatment of round-off errors in VF_convolve
  5152.                 and  VF_deconvolve
  5153. Syntax          #include <VFstd.h>
  5154.                 void  VF_setRspEdit( fComplex Trunc );
  5155. Description     In the functions VF_convolve and VF_deconvolve, a frequency
  5156.                 filter is calculated by Fourier-transforming a given response
  5157.                 function. The filter is then applied to a vector. Due to
  5158.                 accumulated round-off, filter elements that should be zero
  5159.                 may be not so, but contain small non-zero numbers.
  5160.  
  5161.                 The maximum round-off error in the construction of Flt
  5162.                 accumulates roughly to (size * big * prec), where big is the
  5163.                 largest element of Flt and prec the relative floating-point
  5164.                 precision. Any element smaller than that should be regarded as
  5165.                 zero. In order to determine the exact threshold for the real
  5166.                 and imaginary parts separately, the function uses the real
  5167.                 and imaginary parts of Trunc, substituting them for prec in
  5168.                 the above expression. Normally, you would choose
  5169.                 Trunc.Re = Trunc.Im,  although a stricter (i.e. larger)
  5170.                 value for Trunc.Im is also reasonable.
  5171.  
  5172.                 By default, Trunc.Re = 16*EPSILON and Trunc.Im = 32*EPSILON,
  5173.                 where EPSILON is FLT_EPSILON, DBL_EPSILON, or LDBL_EPSILON
  5174.                 (these constants are defined in <float.h>), depending on
  5175.                 the data type.
  5176.  
  5177.                 In order to switch the editing of the filter completely off,
  5178.                 choose Trunc.Re = Trunc.Im = 0.
  5179.  
  5180.                 During convolutions, the editing of the filter leads to
  5181.                 slightly smoother results. During deconvolutions, the
  5182.                 editing has also another meaning: for all "lost" frequencies
  5183.                 (i.e., those for which the Fourier transform of the response
  5184.                 function contains only numbers near zero), the filter is set
  5185.                 to 0 instead of the inverse of these small numbers. Thereby,
  5186.                 possible OVERFLOW and SING errors are avoided.
  5187.  
  5188.                 To read the currently set threshold, call VF_getRspEdit.
  5189. Error handling  none
  5190. Return value    none
  5191. See also        VF_convolve,  VF_deconvolve, VF_getRspEdit
  5192.  
  5193.  
  5194. ┌────────────────────────────────────────────────────────────────────────────┐
  5195. │ V_setSymbolSize                                                            │
  5196. └────────────────────────────────────────────────────────────────────────────┘
  5197. Function        Modify the size of the symbols used in plotting functions
  5198. Syntax          #include <Vgraph.h>
  5199.                 void V_setSymbolSize( float symsiz );
  5200. Description     The size of the symbols used in the plotting functions
  5201.                 VF_xyAutoPlot, VCF_autoPlot, etc., is modified by scaling with
  5202.                 symsiz. To reset the symbol size to the default value, call
  5203.                 V_setSymbolSize with symsiz=1.0. Note that it is not possible
  5204.                 to make the symbols completely vanish (e.g., by setting
  5205.                 symsiz = 0.0), since a minimum radius of one pixel is always
  5206.                 secured. Useful values of symsiz range from about 0.5 to 5.0.
  5207.                 Values above 50.0 are prohibited.
  5208.  
  5209.                 When magnifying the symbols, you should also consider modifying
  5210.                 the thickness of the connecting lines, if you are using any.
  5211.                 See V_setLineThickness.
  5212.  
  5213.                 Notice: An automatic scaling is always performed in order to
  5214.                 maintain a constant relation between the symbol size and the
  5215.                 overall size of the coordinate grid (which is especially
  5216.                 important for Windows applications). The factor symsiz of this
  5217.                 function scales the symbol size with respect to the
  5218.                 automatically-found value. The automatic scaling cannot be
  5219.                 switched off.
  5220. Error handling  DOS: "silent" correction of the input value.
  5221.                 Windows: A value of symsiz greater than 50.0 leads to a
  5222.                 warning message "Cannot scale symbols by more than a factor
  5223.                 of 50.0". Program execution is continued with symsiz set
  5224.                 to 50.0.
  5225. Return value    none
  5226. See also        VF_xyAutoPlot, V_setLineThickness
  5227.  
  5228.  
  5229. ┌────────────────────────────────────────────────────────────────────────────┐
  5230. │ VF_setWriteFormat        VD_setWriteFormat        VE_setWriteFormat        │
  5231. │ VCF_setWriteFormat       VCD_setWriteFormat       VCE_setWriteFormat       │
  5232. │ VI_setWriteFormat        VSI_setWriteFormat                                │
  5233. │ VLI_setWriteFormat       VQI_setWriteFormat                                │
  5234. │ VU_setWriteFormat        VUS_setWriteFormat                                │
  5235. │ VUL_setWriteFormat       VUI_setWriteFormat                                │
  5236. └────────────────────────────────────────────────────────────────────────────┘
  5237. Function        Definition of the format to be used by V.._write and
  5238.                 V.._nwrite
  5239. Syntax          #include <VFstd.h>
  5240.                 void VF_setWriteFormat( char *FormatString );
  5241. Description     The functions of the VF_write and VF_nwrite families employ
  5242.                 internally the ANSI C function fprintf in order to print
  5243.                 numbers into a stream.
  5244.                 According to the rules described in the documentation of
  5245.                 Borland C++ for printf, the format may be specified as fits
  5246.                 your needs. When defining a write format, one should always
  5247.                 be aware of the restrictions imposed by the read functions
  5248.                 (not all formats you can write will be read correcly, see
  5249.                 VF_read).
  5250.  
  5251.                 VF_setWriteFormat should not be used for the definition of
  5252.                 whitespace before or after the numbers. This is the task
  5253.                 of VF_setWriteSeparate.
  5254.  
  5255.                 For details about the formats used for each of the various
  5256.                 data types, please refer to the following table. The last
  5257.                 column of this table gives the maximum length of the format
  5258.                 string.
  5259.  
  5260.    │ Version │     Standard Format    │    Alternative Example  │max.length │
  5261.    ├─────────┼────────────────────────┼─────────────────────────┼───────────┤
  5262.    │ VF_     │              "% 11.8e" │                "% 8.4f" │     16    │
  5263.    │ VD_     │            "% 19.16le" │              "% 16.8lf" │     16    │
  5264.    │ VE_     │            "% 22.19Le" │             "% 22.19LG" │     16    │
  5265.    │ VCF_    │     "% 11.8e, % 11.8e" │      "{% 8.4f, % 8.4f}" │     32    │
  5266.    │ VCD_    │ "% 19.16le, % 19.16le" │ "{% 19.16lE % 19.16lE}" │     32    │
  5267.    │ VCE_    │ "% 22.19Le, % 22.19Le" │ "{% 22.19Lg % 22.19Lg}" │     32    │
  5268.    │ VI_     │                 "% 5d" │                "0x% 4x" │     12    │
  5269.    │ VSI_    │                "% 5hd" │               "0x% 4hX" │     12    │
  5270.    │ VLI_    │               "% 10ld" │                "%08lXh" │     12    │
  5271.    │ VQI_    │             "% 20.0Lf" │                         │     16    │
  5272.    │ VU_     │                 "% 5u" │                 "%04xh" │     12    │
  5273.    │ VUS_    │                "% 5hu" │                "0%04ho" │     12    │
  5274.    │ VUL_    │               "% 10lu" │                "0%08lO" │     12    │
  5275.    └─────────┴────────────────────────┴─────────────────────────┴───────────┘
  5276.  
  5277.                 The data type quad is converted into extended before
  5278.                 being passed to fprintf (which, at present, does not
  5279.                 support quads). This explains why the format string in
  5280.                 the VQI_ version tells fprintf to expect a long double.
  5281.  
  5282.                 In the memory model FLAT of the registered version of
  5283.                 VectorLib, the VI_ variant gets the standard format "% 10d"
  5284.                 and the VU_ variant gets the standard format "% 10u".
  5285. Error handling  Format strings longer than the maximum length specified
  5286.                 in the above table lead to a program abort with the error
  5287.                 message "Invalid Parameter(s)".
  5288.                 The contents of the format string is not checked. So you
  5289.                 have to be very careful to specify a format which is valid
  5290.                 for the respective data type.
  5291. Return value    none
  5292. See also        VF_setWriteSeparate, VF_write, VF_nwrite, VF_read, VF_nread
  5293.  
  5294.  
  5295. ┌────────────────────────────────────────────────────────────────────────────┐
  5296. │ VF_setWriteSeparate      VD_setWriteSeparate      VE_setWriteSeparate      │
  5297. │ VCF_setWriteSeparate     VCD_setWriteSeparate     VCE_setWriteSeparate     │
  5298. │ VI_setWriteSeparate      VSI_setWriteSeparate                              │
  5299. │ VLI_setWriteSeparate     VQI_setWriteSeparate                              │
  5300. │ VU_setWriteSeparate      VUS_setWriteSeparate                              │
  5301. │ VUL_setWriteSeparate     VUI_setWriteSeparate                              │
  5302. └────────────────────────────────────────────────────────────────────────────┘
  5303. Function        Definition of the separation string used by V.._write
  5304. Syntax          #include <VFstd.h>
  5305.                 void VF_setWriteSeparate( char *SepString );
  5306. Description     By default, VF_write puts a line feed character after each
  5307.                 vector element written into a stream. This means that each
  5308.                 element gets its own line. You may use VF_setWriteSeparate
  5309.                 to define another separation string. This may be, for
  5310.                 example, a tab character ("\t") or a series of spaces
  5311.                 (e.g., "    ").
  5312.                 If you use VF_write with the output sent directly to the
  5313.                 printer (stream = stdprn), you probably have to explicitly
  5314.                 use a carriage return character in addition to the line
  5315.                 feed. To do this, call
  5316.                       VF_setWriteSeparate( "\n\r" );
  5317.  
  5318.                 VF_write will insert the separation string only in between
  5319.                 the vector elements. At the end, after the last element,
  5320.                 there is always a line feed ("\n") instead of the separation
  5321.                 string.
  5322.  
  5323.                 SepString may contain up to twelve characters.
  5324. Error handling  In the case of SepString longer than twelve characters,
  5325.                 the program is aborted with the error message
  5326.                 "Invalid Parameter(s)".
  5327.                 The contents of SepString is not checked.
  5328. Return value    none
  5329. See also        VF_setWriteFormat, VF_setNWriteSeparate, VF_write, VF_read
  5330.  
  5331.  
  5332. ┌────────────────────────────────────────────────────────────────────────────┐
  5333. │ VF_sgn                   VD_sgn                   VE_sgn                   │
  5334. └────────────────────────────────────────────────────────────────────────────┘
  5335. Function        Signum function, compares each element of a vector with 0.
  5336. Syntax          #include <VFmath.h>
  5337.                 void VF_sgn( fVector Y, fVector X, ui size );
  5338. Description     Each element of X is compared with 0 and the result of the
  5339.                 comparison stored in Y:
  5340.                    Yi  =  +1.0,    if  Xi > 0
  5341.                    Yi  =   0.0,    if  Xi = 0
  5342.                    Yi  =  -1.0,    if  Xi < 0.
  5343.                 This function is implemented as a macro that calls VF_cmp0.
  5344. Error handling  none
  5345. Return value    none
  5346. See also        VF_cmp_..., VF_cmpC, VF_cmpV
  5347.  
  5348.  
  5349. ┌────────────────────────────────────────────────────────────────────────────┐
  5350. │ VI_shl              VSI_shl             VLI_shl             VQI_shl        │
  5351. │ VU_shl              VUS_shl             VUL_shl             VUI_shl        │
  5352. └────────────────────────────────────────────────────────────────────────────┘
  5353. Function        "Shift to the left", i.e. multiply by integer powers of 2.
  5354. Syntax          #include <VImath.h>
  5355.                 void VI_shl(  iVector Y, iVector X, ui size, unsigned C );
  5356.                 void VUL_shl( ulVector Y, ulVector X, ui size, unsigned C );
  5357.                     (similarly all other functions of this family)
  5358. Description     Yi  =  Xi  <<  C
  5359.                 All bits of Xi are shifted to the left by as many positions as
  5360.                 indicated in the parameter C. This corresponds to a
  5361.                 multiplication by 2**C, neglecting possible overflow (in all
  5362.                 versions) and loss of the sign bit (for signed numbers, i.e.
  5363.                 in the VI_, VSI_, VLI_, and VQI_ versions). Note that by
  5364.                 shifting 16-bit numbers (VSI_, VUS_ versions) by more than 15
  5365.                 positions, any non-zero bit present in the original number is
  5366.                 lost and the result is 0. Similarly, 32-bit numbers (VLI_,
  5367.                 VUL_ versions) yield 0 upon shifting by more than 31
  5368.                 positions.  C is always of the data type unsigned. Shifting by
  5369.                 negative numbers C is, therefore, not possible. To perform a
  5370.                 right-shift, the appropriate function of the VI_shr family
  5371.                 has to be used.
  5372. Error handling  none
  5373. Return value    none
  5374. See also        VI_mul,  VI_shr
  5375.  
  5376.  
  5377. ┌────────────────────────────────────────────────────────────────────────────┐
  5378. │ VI_shr              VSI_shr             VLI_shr             VQI_shr        │
  5379. │ VU_shr              VUS_shr             VUL_shr             VUI_shr        │
  5380. └────────────────────────────────────────────────────────────────────────────┘
  5381. Function        "Shift to the right", i.e., divide by integer powers of 2.
  5382. Syntax          #include <VImath.h>
  5383.                 void VI_shr(  iVector  Y, iVector  X,  ui size,    unsigned C );
  5384.                 void VUL_shr( ulVector Y, ulVector X,  ui size, unsigned C );
  5385.                    (similarly all other functions of this family)
  5386. Description     Yi  =  Xi  >>  C
  5387.                 All bits of Xi are shifted to the right by as many positions
  5388.                 as indicated in the parameter C. This corresponds to an
  5389.                 integer division by 2**C. The sign of Yi is always the same as
  5390.                 of Xi. In contrast to explicit integer divisions, the result
  5391.                 is always rounded toward minus infinity:  -15 / 2 = -7,  but
  5392.                 -15 >> 1 = -8. Note that by shifting 16-bit numbers (VSI_,
  5393.                 VUS_ versions) by more than 15 positions, any unsigned or
  5394.                 positive number yields 0, whereas any negative number (in the
  5395.                 VSI_ version) yields -1 in this case. The same is true for 32-
  5396.                 bit numbers (VLI_, VUL_ versions) upon shifting by more than
  5397.                 31 positions. C is always of the data type unsigned. Shifting
  5398.                 by negative numbers C is, therefore, not possible. To perform
  5399.                 a left-shift, the appropriate function of the VI_shl family
  5400.                 has to be used.
  5401. Error handling  none
  5402. Return value    none
  5403. See also        VI_div,  VI_shl
  5404.  
  5405.  
  5406. ┌────────────────────────────────────────────────────────────────────────────┐
  5407. │ VF_sin                   VD_sin                   VE_sin                   │
  5408. │ VFx_sin                  VDx_sin                  VEx_sin                  │
  5409. │ VFr_sin                  VDr_sin                  VEr_sin                  │
  5410. │ VFrx_sin                 VDrx_sin                 VErx_sin                 │
  5411. │ VCF_sin                  VCD_sin                  VCE_sin                  │
  5412. │ VCFx_sin                 VCDx_sin                 VCEx_sin                 │
  5413. └────────────────────────────────────────────────────────────────────────────┘
  5414. Function        Sine function
  5415. Syntax          #include <VFmath.h>
  5416.                 int  VF_sin(  fVector  Y,  fVector  X, ui size );
  5417.                 int  VFx_sin( fVector  Y,  fVector  X, ui size,
  5418.                               float A, float B, float C );
  5419.                 int  VFr_sin(  fVector  Y,  fVector  X, ui size );
  5420.                 int  VFrx_sin( fVector  Y,  fVector  X, ui size,
  5421.                                float A, float B, float C );
  5422. Description     normal versions:    Yi =  sin( Xi )
  5423.                 expanded versions:  Yi =  C *  sin( A*Xi+B )
  5424.                 For large values of Xi, round-off error becomes appreciable;
  5425.                 if the Xi values are representable as fractional multiples of
  5426.                 Pi, it is better to use VF_sinrpi  than VF_sin.
  5427.                 If, on the other hand, one can be sure that all Xi are within
  5428.                 the range  -Pi/2 <= Xi <= +Pi/2, one can employ the faster
  5429.                 reduced-range versions with the prefixes VFr_  and VFrx_.
  5430. Error handling  Precision errors lead to a default result of 0.0 and a non-
  5431.                 zero return value, but are ignored otherwise; _matherr is
  5432.                 not called.
  5433.                 OVERFLOW errors can only occur in the complex versions and
  5434.                 lead to a result of ±HUGE_VAL.
  5435. Return value    0, if no error occurred, otherwise non-zero
  5436. See also        VF_sin2,  VF_sinrpi,  VF_cos,  VF_sinh,  VF_asin,  sin
  5437.  
  5438.  
  5439. ┌────────────────────────────────────────────────────────────────────────────┐
  5440. │ VF_sin2                  VD_sin2                  VE_sin2                  │
  5441. │ VFx_sin2                 VDx_sin2                 VEx_sin2                 │
  5442. │ VFr_sin2                 VDr_sin2                 VEr_sin2                 │
  5443. │ VFrx_sin2                VDrx_sin2                VErx_sin2                │
  5444. └────────────────────────────────────────────────────────────────────────────┘
  5445. Function        Square of the sine function
  5446. Syntax          #include <VFmath.h>
  5447.                 int  VF_sin2(  fVector  Y,  fVector  X, ui size );
  5448.                 int  VFx_sin2( fVector  Y,  fVector  X, ui size,
  5449.                                float A, float B, float C );
  5450. Description     normal versions:    Yi  =  sin²( Xi )
  5451.                 expanded versions:  Yi  =  C *  sin²( A*Xi+B )
  5452.                 Calculating the squared trigonometric functions directly is
  5453.                 faster and sometimes more accurate than first calculating the
  5454.                 trigonometric function itself and squaring it afterwards.
  5455.                 The reduced-range versions with the prefixes VFr_ and VFrx_
  5456.                 are for situations in which one can be sure that all input
  5457.                 values lie in the range  -Pi/2 <= Xi <= +Pi/2.
  5458. Error handling  Precision errors lead to a default result of 0.0 and a non-
  5459.                 zero return value, but are otherwise ignored; _matherr is not
  5460.                 called.
  5461.                 OVERFLOW errors can only occur in the complex versions and
  5462.                 lead to a result of ±HUGE_VAL.
  5463. Return value    0, if no error occurred, otherwise non-zero.
  5464. See also        VF_sin,   VF_sinrpi,   sin
  5465.  
  5466.  
  5467. ┌────────────────────────────────────────────────────────────────────────────┐
  5468. │ VF_sinc                  VD_sinc                  VE_sinc                  │
  5469. │ VFx_sinc                 VDx_sinc                 VEx_sinc                 │
  5470. └────────────────────────────────────────────────────────────────────────────┘
  5471. Function        Sinc function
  5472. Syntax          #include <VFmath.h>
  5473.                 int  VF_sinc(  fVector  Y,  fVector  X, ui size );
  5474.                 int  VFx_sinc( fVector  Y,  fVector  X, ui size,
  5475.                                float A, float B, float C );
  5476. Description     normal versions:    Yi =  sinc( Xi )  =  sin( Xi ) / Xi
  5477.                 expanded versions:  Yi = C * sinc( A*Xi+B )
  5478.                 The sinc function for an argument of 0.0 is defined as 1.0.
  5479.                 The sinc function is the Fourier transform of a square pulse
  5480.                 and is used, for example, to describe the diffraction pattern
  5481.                 of a slit.
  5482. Error handling  These functions should be error-proof.
  5483. Return value    always 0.
  5484. See also        VF_sin,   VF_sinrpi,   sin
  5485.  
  5486.  
  5487. ┌────────────────────────────────────────────────────────────────────────────┐
  5488. │ VF_sincos                VD_sincos                VE_sincos                │
  5489. │ VFx_sincos               VDx_sincos               VEx_sincos               │
  5490. │ VFr_sincos               VDr_sincos               VEr_sincos               │
  5491. │ VFrx_sincos              VDrx_sincos              VErx_sincos              │
  5492. └────────────────────────────────────────────────────────────────────────────┘
  5493. Function        Sine and Cosine simultaneously
  5494. Syntax          #include <VFmath.h>
  5495.                 int  VF_sincos( fVector  YSin,  fVector YCos,
  5496.                                 fVector  X, ui size );
  5497.                 int  VFx_sincos( fVector  YSin,  fVector YCos,
  5498.                                  fVector  X, ui size,
  5499.                                  float A, float B, float C );
  5500.                 int  VFr_sincos( fVector  YSin,  fVector YCos,
  5501.                                  fVector  X, ui size );
  5502.                 int  VFrx_sincos( fVector  YSin,  fVector YCos,
  5503.                                   fVector  X, ui size,
  5504.                                   float A, float B, float C );
  5505. Description     normal versions:   YSin[i]  =  sin( Xi )
  5506.                                    YCos[i]  =  cos( Xi )
  5507.                 expanded versions: YSin[i]  =  C *  sin( A*Xi+B )
  5508.                                    YCos[i]  =  C *  cos( A*Xi+B )
  5509.                 The sine and the cosine are calculated simultaneously, which
  5510.                 is far more efficient than calculating them separately if both
  5511.                 of them are needed. For large values of Xi, round-off error
  5512.                 becomes appreciable; if the Xi values are representable as
  5513.                 fractional multiples of Pi, it is better to use VF_sincosrpi
  5514.                 than VF_sincos.
  5515.                 If, on the other hand, one can be sure that all Xi are within
  5516.                 the range  -Pi/2 <= Xi <= +Pi/2, one can employ the faster
  5517.                 reduced-range versions with the prefixes VFr_  and VFrx_.
  5518. Error handling  Precision errors lead to a result of 0.0 for the sine and 1.0
  5519.                 for the cosine (as if the input were 0.0) along with a non-
  5520.                 zero return value, but are otherwise ignored; _matherr is not
  5521.                 called. Other errors should not occur.
  5522. Return value    0, if no error occurred, otherwise non-zero.
  5523. See also        VF_sincos2,  VF_sincosrpi,  sin,  cos
  5524.  
  5525.  
  5526. ┌────────────────────────────────────────────────────────────────────────────┐
  5527. │ VF_sincos2               VD_sincos2               VE_sincos2               │
  5528. │ VFx_sincos2              VDx_sincos2              VEx_sinco2               │
  5529. │ VFr_sincos2              VDr_sincos2              VEr_sincos2              │
  5530. │ VFrx_sincos2             VDrx_sincos2             VErx_sinco2              │
  5531. └────────────────────────────────────────────────────────────────────────────┘
  5532. Function        Square of the sine and of the cosine simultaneously
  5533. Syntax          #include <VFmath.h>
  5534.                 int  VF_sincos2(  fVector YSin2, fVector YCos2,
  5535.                                   fVector  X, ui size );
  5536.                 int  VFx_sincos2( fVector YSin2, fVector YCos2,
  5537.                                   fVector  X, ui size,
  5538.                                   float A, float B, float C );
  5539. Description     normal versions:    YSin2[i]  =  sin²( Xi )
  5540.                                     YCos2[i]  =  cos²( Xi )
  5541.                 expanded versions:  YSin2[i]  =  C * sin²( A*Xi+B )
  5542.                                     YCos2[i]  =  C * cos²( A*Xi+B )
  5543.                 The squared sine and the squared cosine are calculated
  5544.                 simultaneously, which is far more efficient than calculating
  5545.                 them separately, if both of them are needed.
  5546.                 The reduced-range versions with the prefixes VFr_ and VFrx_
  5547.                 are for situations in which one can be sure that all input
  5548.                 values lie in the range  -Pi/2 <= Xi <= +Pi/2.
  5549. Error handling  Precision errors lead to a result of 0.0 for the sin² and of
  5550.                 1.0 for the cos² (as if the input were 0.0) along with a non-
  5551.                 zero return value, but are otherwise ignored; _matherr is not
  5552.                 called. Other errors should not occur.
  5553. Return value    0, if no error occurred, otherwise non-zero.
  5554. See also        VF_sincos,   sin,  cos
  5555.  
  5556.  
  5557. ┌────────────────────────────────────────────────────────────────────────────┐
  5558. │ VF_sincosrpi             VD_sincosrpi             VE_sincosrpi             │
  5559. │ VF_sincosrpi2            VD_sincosrpi2            VE_sincosrpi2            │
  5560. │ VF_sincosrpi3            VD_sincosrpi3            VE_sincosrpi3            │
  5561. └────────────────────────────────────────────────────────────────────────────┘
  5562. Function        Sine and cosine of fractional multiples of Pi
  5563. Syntax          #include <VFmath.h>
  5564.                 int  VF_sincosrpi(   fVector  YSin,  fVector YCos,
  5565.                                      iVector  P, ui size,  int q );
  5566.                 int  VF_sincosrpi2(  fVector  YSin,  fVector YCos,
  5567.                                      iVector  P, ui size,  int q );
  5568.                 int  VF_sincosrpi3(  fVector  YSin,  fVector YCos,
  5569.                                      iVector  P, ui size,  int q );
  5570. Description     YSin[i]  =  sin( (P[i] / q) * Pi )
  5571.                 YCos[i]  =  cos( (P[i] / q) * Pi )
  5572.                 The sine and the cosine of fractional multiples of Pi are
  5573.                 calculated. There are three versions: VF_sincosrpi is for
  5574.                 general use with any arbitrary denominator q. If q is a power
  5575.                 of 2,  VF_sincosrpi2 should be used which is a highly
  5576.                 optimized version reading the results from a table named
  5577.                 VF_sintab2, if possible. If q is a multiple of 3,
  5578.                 VF_sincosrpi3 should be used which utilizes a table named
  5579.                 VF_sintab3. The use of VF_sincosrpi3 is a convenient way to
  5580.                 use degrees instead of radians; if, for example, q is 180,
  5581.                 then the unit of the elements of P is "degree". VF_sincosrpi2
  5582.                 and VF_sincosrpi3 work also with q values they are not
  5583.                 optimized for; in this case, however, memory space is wasted
  5584.                 for the (then useless) tables.
  5585. Error handling  These functions should be error-proof, as long as q!=0.
  5586. Return value    always 0
  5587. See also        VF_sincos,    sin, cos
  5588.  
  5589.  
  5590. ┌────────────────────────────────────────────────────────────────────────────┐
  5591. │ VF_sinh                  VD_sinh                  VE_sinh                  │
  5592. │ VCF_sinh                 VCD_sinh                 VCE_sinh                 │
  5593. │ VFx_sinh                 VDx_sinh                 VEx_sinh                 │
  5594. │ VCFx_sinh                VCDx_sinh                VCEx_sinh                │
  5595. └────────────────────────────────────────────────────────────────────────────┘
  5596. Function        Hyperbolic sine function
  5597. Syntax          #include <VFmath.h>
  5598.                 int  VF_sinh(  fVector  Y,  fVector  X, ui size );
  5599.                 int  VFx_sinh( fVector  Y,  fVector  X, ui size,
  5600.                                float A, float B, float C );
  5601. Description     normal versions:      Yi  =  sinh( Xi )
  5602.                 expanded versions:    Yi  =  C * sinh ( A*Xi+B )
  5603. Error handling  OVERFLOW errors lead to a default result of ±HUGE_VAL.
  5604. Return value    0, if no error occurred, otherwise non-zero.
  5605. See also        VF_cosh,  VF_exp,   sinh
  5606.  
  5607.  
  5608. ┌────────────────────────────────────────────────────────────────────────────┐
  5609. │ VF_sinrpi                VD_sinrpi                VE_sinrpi                │
  5610. │ VF_sinrpi2               VD_sinrpi2               VE_sinrpi2               │
  5611. │ VF_sinrpi3               VD_sinrpi3               VE_sinrpi3               │
  5612. └────────────────────────────────────────────────────────────────────────────┘
  5613. Function        Sine function of fractional multiples of Pi
  5614. Syntax          #include <VFmath.h>
  5615.                 int  VF_sinrpi(  fVector Y, iVector P, ui size, int q );
  5616.                 int  VF_sinrpi2( fVector Y, iVector P, ui size, int q );
  5617.                 int  VF_sinrpi3( fVector Y, iVector P, ui size, int q );
  5618. Description     Yi  =  sin( (P[i] / q) * Pi )
  5619.                 The sine of fractional multiples of Pi is calculated. There
  5620.                 are three versions: VF_sinrpi is for general use with any
  5621.                 arbitrary denominator q. If q is a power of 2,  VF_sinrpi2
  5622.                 should be used which is a highly optimized version reading
  5623.                 the results from a look-up table, if possible. If q is a
  5624.                 multiple of 3,  VF_sinrpi3 should be used.  VF_sinrpi3 offers
  5625.                 a convenient way to use degrees instead of radians; if, for
  5626.                 example, q is 180, then the unit of the elements of P is
  5627.                 "degree".  VF_sinrpi2 and VF_sinrpi3 work also with q values
  5628.                 they are not optimized for; in this case, however, memory
  5629.                 space is wasted for the tables.
  5630. Error handling  These functions should be error-proof, as long as q!=0.
  5631. Return value    always 0
  5632. See also        VF_sin,    sin
  5633.  
  5634.  
  5635. ┌────────────────────────────────────────────────────────────────────────────┐
  5636. │ VF_sintab2               VD_sintab2               VE_sintab2               │
  5637. │ VF_sintab3               VD_sintab3               VE_sintab3               │
  5638. └────────────────────────────────────────────────────────────────────────────┘
  5639.                 Table of sine values for arguments between 0 and Pi/2
  5640. Syntax          #include <xmath.h>
  5641.                 extern float     VF_sintab2[ VF_tabsz2+1 ];
  5642.                 extern double    VD_sintab2[ VD_tabsz2+1 ];
  5643.                 extern extended  VE_sintab2[ VE_tabsz2+1 ];
  5644.                 extern float     VF_sintab3[ VF_tabsz3+1 ];
  5645.                 extern double    VD_sintab3[ VD_tabsz3+1 ];
  5646.                 extern extended  VE_sintab3[ VE_tabsz3+1 ];
  5647. Description     VF_sintab2[ i ]  =  sin( i/(2*VF_tabsz2) * Pi ),
  5648.                                                       i=0,...,VF_tabsz2
  5649.                 VF_sintab3[ i ]  =  sin( i/(2*VF_tabsz3) * Pi ),
  5650.                                                       i=0,...,VF_tabsz3
  5651.                 These look-up tables of sine values for arguments between 0
  5652.                 and Pi/2 are used by VF_sinrpi2 and the other functions of
  5653.                 that family and are also available for other purposes.
  5654.                 The symbols VF_tabsz2 etc., denoting the size of the tables,
  5655.                 are defined in <xmath.h>.
  5656. See also        VF_sinrpi2,  VF_tantab2,  VF_cosectab2
  5657.  
  5658.  
  5659. ┌────────────────────────────────────────────────────────────────────────────┐
  5660. │ VF_sort                  VD_sort                  VE_sort                  │
  5661. │ VI_sort             VSI_sort            VLI_sort            VQI_sort       │
  5662. │ VU_sort             VUS_sort            VUL_sort            VUI_sort       │
  5663. └────────────────────────────────────────────────────────────────────────────┘
  5664. Function        Sorting into ascending or descending order
  5665. Syntax          #include <VFstd.h>
  5666.                 void  VF_sort( fVector Y, fVector X, ui size, int dir );
  5667. Description     The vector is sorted in ascending order, if dir is positive;
  5668.                 negative dir yields descending order. The present
  5669.                 implementation uses the "Heapsort" algorithm.
  5670. Error handling  none
  5671. Return value    none
  5672. See also        VF_sortind,  VF_rotate, VF_rev,  qsort
  5673.  
  5674.  
  5675. ┌────────────────────────────────────────────────────────────────────────────┐
  5676. │ VF_sortind               VD_sortind               VE_sortind               │
  5677. │ VI_sortind          VSI_sortind         VLI_sortind         VQI_sortind    │
  5678. │ VU_sortind          VUS_sortind         VUL_sortind         VUI_sortind    │
  5679. └────────────────────────────────────────────────────────────────────────────┘
  5680. Function        Sort the index-array of a vector
  5681. Syntax          #include <VFstd.h>
  5682.                 void VF_sortind( uiVector Ind,  fVector X, ui size, int dir );
  5683. Description     The routine is similar to VF_sort, but this time it is the
  5684.                 index-array of X rather than the vector X itself that is
  5685.                 ordered. Ascending order is obtained by setting dir to any
  5686.                 positive number. Here, ascending order means that Ind[0] will
  5687.                 contain the index of the smallest element of X, Ind[1] the
  5688.                 index of the second-smallest, and so on, up to Ind[size-1],
  5689.                 the index of the largest element in X. Descending order is
  5690.                 obtained by setting dir negative. This routine is used if
  5691.                 other vectors are correlated with X and the correlation of the
  5692.                 individual elements has to be maintained. After sorting the
  5693.                 index-array, use VF_indpick (VD_indpick, VI_indpick, etc.) to
  5694.                 actually perform the sorting of X and the other vectors
  5695.                 correlated with X.
  5696. Error handling  none
  5697. Return value    none
  5698. See also        VF_sort, VF_indpick
  5699.  
  5700.  
  5701. ┌────────────────────────────────────────────────────────────────────────────┐
  5702. │ VF_spectrum              VD_spectrum              VE_spectrum              │
  5703. └────────────────────────────────────────────────────────────────────────────┘
  5704. Function        Power-density spectrum
  5705. Syntax          #include <VFstd.h>
  5706.                 float VF_spectrum(  fVector Spc,  ui specsiz,
  5707.                                     fVector X,  ui xsiz, fVector Win );
  5708. Description     The data set X is analyzed for its power spectral density
  5709.                 (PSD), i.e. the mean square amplitude. The result is stored
  5710.                 in Spc.  xsiz must be at least 2*specsiz, and specsiz has to
  5711.                 be an integer power of 2.   Internally, X is divided into
  5712.                 xsiz*specsiz/2 segments and the average over the spectra of
  5713.                 the individual segments is calculated. Each segment of length
  5714.                 2*specsiz yields the PSD for specsiz+1 frequencies (see
  5715.                 VF_FFT). In order to keep specsiz an integer power of 2, there
  5716.                 are only specsiz points stored in Spc and the last one, the
  5717.                 PSD at the Nyquist frequency, is given as the return value
  5718.                 of the function and may either be neglected (by calling the
  5719.                 function like a void function) or stored as the last element
  5720.                 in Spc by calling the function as
  5721.                    Spc[specsiz] = VF_spectrum( Spc, specsiz, X, xsiz, Win );
  5722.                 in this case, Spc must have a length of specsiz+1.
  5723.  
  5724.                 Win is a window that is applied to the data segments. The size
  5725.                 of the Win vector must be 2*specsiz. Within the VectorLib
  5726.                 library, three functions are available that give suitable
  5727.                 Windows: VF_Welch, VF_Parzen, and VF_Hanning. A square window
  5728.                 (i.e. no windowing at all) is achieved by setting all elements
  5729.                 of Win to 1.0 using VF_equ1. Use of the square window is not
  5730.                 recommended here, though.
  5731.  
  5732.                 You may wish to test the quality of the calculated spectrum by
  5733.                 applying the Wiener-Khinchin theorem (provided you called
  5734.                 VF_spectrum as in the above example and stored the PSD for the
  5735.                 Nyquist frequency):
  5736.                 1.0/xsize * VF_ssq( X, xsize ) must be about equal to
  5737.                 VF_sum( Spc, specsiz+1 ).
  5738.                 If the deviation between both results is large, the sampling
  5739.                 interval in X probably is too large.
  5740.  
  5741.                 About special versions with the prefixes  VFs_  and VFl_,
  5742.                 consult chapter 4.8.
  5743. Example (for DOS):
  5744.                 #include <VFstd.h>
  5745.                 #include <VFmath.h>
  5746.                 #include <Vgraph.h>
  5747.                 #include <math.h>
  5748.                 #include <conio.h>
  5749.                 void main( void )
  5750.                 {
  5751.                     fVector  X,   Spc,  Win,  Time,   Freq;
  5752.                     ui       xsize=1024,  specsiz=128;
  5753.                     X    = VF_vector( xsize );
  5754.                     Spc  = VF_vector( specsiz+1 );
  5755.                     Win  = VF_vector( 2*specsiz );
  5756.                     Time = VF_vector( xsize );
  5757.                     Freq = VF_vector( specsiz+1);
  5758.  
  5759.                     VF_ramp( Time, xsize, 0.0, 200 * M_PI / xsize );
  5760.                     VF_ramp( Freq, specsiz+1,  0.0, (xsize / (200*M_PI)) /
  5761.                              specsiz );
  5762.                        /* get a Time axis from 0 to 200 Pi and a corresponding
  5763.                           frequency axis from 0 to the Nyquist frequency */
  5764.                     VF_sin( X, Time, xsize );    /* 100 periods of a sine */
  5765.                     VF_cmpC( X, X, xsize, 0.5 );
  5766.                                   /* convert into asymmetric square wave */
  5767.                     VF_Welch( Win, 2*specsiz );   /* or another window */
  5768.                     Spc[specsiz] = VF_spectrum( Spc, specsiz, X, xsize, Win );
  5769.                     V_initGraph( "\\BorlandC\\BGI\\" );
  5770.                                        /* give the correct BGI path! */
  5771.                     VF_xyAutoPlot( Freq, Spc, specsiz+1,
  5772.                                    PS_SOLID | SY_CROSS, GREEN );
  5773.                     getch();   /* hit any key when you have seen enough */
  5774.                     closegraph();
  5775.                     V_nfree( 5, Freq, Time, Win, Spc, X );
  5776.                 }
  5777. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_spectrum
  5778.                 is based) complains "Size must be an integer power of 2"
  5779.                 and the program is aborted.
  5780. Return value    PSD at the Nyquist frequency
  5781. See also        VF_FFT, VF_convolve, VF_autocorr, VF_xcorr, VF_filter
  5782.  
  5783.  
  5784. ┌────────────────────────────────────────────────────────────────────────────┐
  5785. │ VF_splinederiv2          VD_splinederiv2          VE_splinederiv2          │
  5786. └────────────────────────────────────────────────────────────────────────────┘
  5787. Function        Generate a second-derivative table from an X-Y-table to be
  5788.                 used for cubic-spline interpolation.
  5789. Syntax          #include <VFstd.h>
  5790.                 void  VF_splinederiv2(
  5791.                                 fVector Y2,
  5792.                                 fVector XTab, fVector YTab, ui size,
  5793.                                 int specify,  float Yp0, float Ypn );
  5794. Description     A table of second derivatives of YTab is generated to be used
  5795.                 for cubic-spline interpolation with VF_splineinterpol. In
  5796.                 order to get a unique solution, two additional conditions have
  5797.                 to be specified. Setting specify to 0 yields the "natural
  5798.                 cubic spline" with Y2 being set to zero at both end-points; in
  5799.                 this case, Yp0 and Ypn have no influence. Setting specify to 1
  5800.                 yields Y2 calculated in such a way that the first(!)
  5801.                 derivative at the zeroth and at the last position equals Yp0
  5802.                 and Ypn, resp.
  5803. Error handling  none
  5804. Return value    none
  5805. See also        VF_splineinterpol
  5806.  
  5807.  
  5808. ┌────────────────────────────────────────────────────────────────────────────┐
  5809. │ VF_splineinterpol        VD_splineinterpol        VE_splineinterpol        │
  5810. └────────────────────────────────────────────────────────────────────────────┘
  5811. Function        Cubic-spline interpolation of X-Y-table values
  5812. Syntax          #include <VFstd.h>
  5813.                 void  VF_splineinterpol(
  5814.                              fVector Y,  fVector X,  ui sizex,
  5815.                              fVector XTab,  fVector YTab,
  5816.                              fVector Y2Tab,  ui sizetab );
  5817. Description     For each of the sizex elements of X, the corresponding element
  5818.                 of Y is interpolated from the XTab-YTab value pairs. A table
  5819.                 of second derivatives of YTab is needed that has to be
  5820.                 generated by a call to VF_splinederiv2 prior to calling
  5821.                 VF_splineinterpol.  XTab must be ordered (either ascending or
  5822.                 descending). All values of XTab must be distinct; otherwise a
  5823.                 division by zero may occur and lead to a program abort.
  5824.                 sizetab must be greater than or equal to 3.
  5825. Error handling  none (you have to take care yourself that the XTab values are
  5826.                 distinct and that the YTab values are not near the limit of
  5827.                 overflowing).
  5828. Return value    none
  5829. See also        VF_splinederiv2, VF_ratinterpol, VF_polyinterpol
  5830.  
  5831.  
  5832. ┌────────────────────────────────────────────────────────────────────────────┐
  5833. │ VF_square                VD_square                VE_square                │
  5834. │ VFx_square               VDx_square               VEx_square               │
  5835. │ VFu_square               VDu_square               VEu_square               │
  5836. │ VFux_square              VDux_square              VEux_square              │
  5837. │ VCF_square               VCD_square               VCE_square               │
  5838. │ VCFx_square              VCDx_square              VCEx_square              │
  5839. └────────────────────────────────────────────────────────────────────────────┘
  5840. Function        Square
  5841. Syntax          #include <VFmath.h>
  5842.                 int  VF_square(  fVector  Y,  fVector  X, ui size );
  5843.                 int  VFx_square( fVector  Y,  fVector  X, ui size,
  5844.                                  float A, float B );
  5845.                 int  VFu_square(  fVector  Y,  fVector  X, ui size );
  5846.                 int  VFux_square( fVector  Y,  fVector  X, ui size,
  5847.                                   float A, float B );
  5848. Description     normal versions:    Yi = Xi²
  5849.                 expanded versions:  Yi = (A*Xi+B)²
  5850.                 The "unprotected" versions (prefix VFu_ and VFux_) do not
  5851.                 perform any error handling, which makes them very fast;
  5852.                 they should be used very carefully.
  5853. Error handling  OVERFLOW errors lead to a default result of HUGE_VAL.
  5854. Return value    0, if no error occurred, otherwise non-zero
  5855. See also        VF_cubic,  VF_sqrt,  VF_pow,  VF_ipow,  VF_poly
  5856.  
  5857.  
  5858. ┌────────────────────────────────────────────────────────────────────────────┐
  5859. │ VF_sqrt                  VD_sqrt                  VE_sqrt                  │
  5860. │ VCF_sqrt                 VCD_sqrt                 VCE_sqrt                 │
  5861. │ VFx_sqrt                 VDx_sqrt                 VEx_sqrt                 │
  5862. │ VCFx_sqrt                VCDx_sqrt                VCEx_sqrt                │
  5863. └────────────────────────────────────────────────────────────────────────────┘
  5864. Function        Square root
  5865. Syntax          #include <VFmath.h>
  5866.                 int  VF_sqrt(  fVector Y,  fVector X, ui size );
  5867.                 int  VFx_sqrt( fVector Y,  fVector  X, ui size,
  5868.                                float A, float B, float C );
  5869. Description     normal versions:    Yi =  sqrt( Xi )
  5870.                 expanded versions:  Yi =  C * sqrt( A*Xi+B )
  5871. Error handling  DOMAIN errors occur if, in the real-number versions, the
  5872.                 square root of a negative numbers is requested; NAN ("not-a-
  5873.                 number") is the default result in this case.
  5874. Return value    0, if no error occurred, otherwise non-zero
  5875. See also        VF_square,  VF_sqrt,  VF_pow,  VF_ipow,  VF_poly
  5876.  
  5877.  
  5878. ┌────────────────────────────────────────────────────────────────────────────┐
  5879. │ VF_ssq                   VD_ssq                   VE_ssq                   │
  5880. └────────────────────────────────────────────────────────────────────────────┘
  5881. Function        Sum-of-squares
  5882. Syntax          #include <VFstd.h>
  5883.                 float  VF_ssq( fVector X, ui size );
  5884. Description     ssq  =  sum( Xi² )
  5885. Error handling  none (but be careful: this function may lead to an overflow!)
  5886. Return value    sum of the squares of the vector elements.
  5887. See also        VF_sum,  VF_rms,  VF_ssqdevC, VF_scalprod,  VF_Euclid
  5888.  
  5889.  
  5890. ┌────────────────────────────────────────────────────────────────────────────┐
  5891. │ VF_ssqdevC               VD_ssqdevC               VE_ssqdevC               │
  5892. └────────────────────────────────────────────────────────────────────────────┘
  5893. Function        Sum of the squares of the deviations from a preset value.
  5894. Syntax          #include <VFstd.h>
  5895.                 float  VF_ssqdevC( fVector X, ui size, float C );
  5896. Description     ssqdevC  =  sum( (Xi - C)² )
  5897. Error handling  none
  5898. Return value    sum of the squares of the deviations.
  5899. See also        VF_ssq, VF_ssqdevV, VF_avdevC,  VF_sumdevC, VF_chi2
  5900.  
  5901.  
  5902. ┌────────────────────────────────────────────────────────────────────────────┐
  5903. │ VF_ssqdevV               VD_ssqdevV               VE_ssqdevV               │
  5904. └────────────────────────────────────────────────────────────────────────────┘
  5905. Function        Sum of the squares of the deviations of the elements of one
  5906.                 vector from the corresponding elements of another
  5907. Syntax          #include <VFstd.h>
  5908.                 float  VF_ssqdevV( fVector X, fVector Y, ui size );
  5909. Description     ssqdevV  =  sum( (Xi - Yi)² )
  5910.                 The deviation of each element of X from the corresponding
  5911.                 element of Y is calculated and the squares of the deviations
  5912.                 summed up and returned.
  5913. Error handling  none
  5914. Return value    sum of the squares of the deviations.
  5915. See also        VF_ssq, VF_ssqdevC, VF_avdevV, VF_sumdevV, VF_chi2
  5916.  
  5917.  
  5918. ┌────────────────────────────────────────────────────────────────────────────┐
  5919. │ VF_store                 VD_store                 VE_store                 │
  5920. │ VCF_store                VCD_store                VCE_store                │
  5921. │ VI_store            VSI_store           VLI_store           VQI_store      │
  5922. │ VU_store            VUS_store           VUL_store           VUI_store      │
  5923. └────────────────────────────────────────────────────────────────────────────┘
  5924. Function        Store a vector in binary format into a stream
  5925. Syntax          #include <VFstd.h>
  5926.                 VF_store( FILE *stream,  fVector X,  ui size );
  5927. Description     size elements of X are written to stream in binary format.
  5928.                 The stream must be already open for binary write operations.
  5929. Error handling  none
  5930. Return value    none
  5931. See also        fwrite,  fread, VF_recall,  VF_write, VF_cprint, VF_print
  5932.  
  5933.  
  5934. ┌────────────────────────────────────────────────────────────────────────────┐
  5935. │ VF_subC                  VD_subC                  VE_subC                  │
  5936. │ VCF_subC                 VCD_subC                 VCE_subC                 │
  5937. │ VCF_subReC               VCD_subReC               VCE_subReC               │
  5938. │ VI_subC             VSI_subC            VLI_subC            VQI_subC       │
  5939. │ VU_subC             VUS_subC            VUL_subC            VUI_subC       │
  5940. └────────────────────────────────────────────────────────────────────────────┘
  5941. Function        Subtract a constant from each vector element
  5942. Syntax          #include <VFmath.h>
  5943.                 void  VF_subC( fVector Y, fVector X, ui size, float C );
  5944.                 void  VCF_subC(  cfVector Y,  cfVector X,  ui size,
  5945.                                  fComplex C );
  5946.                 void  VCF_subReC( cfVector Y,  cfVector X,  ui size,
  5947.                                   float CRe );
  5948. Description     Yi  =  Xi -  C
  5949.                 The complex floating-point versions exist in two variants, one
  5950.                 for complex constants C, the other for real-valued constants
  5951.                 CRe subtracted from the complex vector.
  5952. Error handling  floating-point versions: none;
  5953.                 integer versions: see chapter 5.2.
  5954. Return value    none
  5955. See also        VF_subV,   VF_subrC, VF_addC,  VF_mulC,  VF_divC
  5956.  
  5957.  
  5958. ┌────────────────────────────────────────────────────────────────────────────┐
  5959. │ VF_subrC                 VD_subrC                 VE_subrC                 │
  5960. │ VCF_subrC                VCD_subrC                VCE_subrC                │
  5961. │ VCF_subrReC              VCD_subrReC              VCE_subrReC              │
  5962. │ VI_subrC            VSI_subrC           VLI_subrC           VQI_subrC      │
  5963. │ VU_subrC            VUS_subrC           VUL_subrC           VUI_subrC      │
  5964. └────────────────────────────────────────────────────────────────────────────┘
  5965. Function        Reverse subtraction: subtract a vector from a constant
  5966. Syntax          #include <VFmath.h>
  5967.                 void  VF_subrC(  fVector Y,  fVector X,  ui size, float C );
  5968.                 void  VCF_subrC( cfVector Y,  cfVector X,  ui size,
  5969.                                  fComplex C );
  5970.                 void  VCF_subrReC( cfVector Y,  cfVector X,  ui size,
  5971.                                    float CRe );
  5972. Description     Yi  =  C  -  Xi
  5973.                 The complex floating-point versions exist in two variants, one
  5974.                 for complex constants C, the other for real-valued constants
  5975.                 CRe from which the complex vector is subtracted.
  5976. Error handling  floating-point versions: none;
  5977.                 integer versions: see chapter 5.2.
  5978. Return value    none
  5979. See also        VF_addV,  VF_subC,  VF_mulC,  VF_divC,  VF_visC,  VF_redC
  5980.  
  5981.  
  5982. ┌────────────────────────────────────────────────────────────────────────────┐
  5983. │ VF_subrV                 VD_subrV                 VE_subrV                 │
  5984. │ VCF_subrV                VCD_subrV                VCE_subrV                │
  5985. │ VCF_subrReV              VCD_subrReV              VCE_subrReV              │
  5986. │ VFx_subrV                VDx_subrV                VEx_subrV                │
  5987. │ VCFx_subrV               VCDx_subrV               VCEx_subrV               │
  5988. │ VCFx_subrReV             VCDx_subrReV             VCEx_subrReV             │
  5989. │ VI_subrV            VSI_subrV           VLI_subrV           VQI_subrV      │
  5990. │ VU_subrV            VUS_subrV           VUL_subrV           VUI_subrV      │
  5991. └────────────────────────────────────────────────────────────────────────────┘
  5992. Function        Subtraction in reverse order
  5993. Syntax          #include <VFmath.h>
  5994.                 void  VF_subrV( fVector Z, fVector X, fVector Y, ui size );
  5995.                 void  VFx_subrV( fVector Z, fVector X,  fVector Y,
  5996.                                  ui size, float A,  float  B );
  5997.                 void  VCF_subrV(  cfVector Z, cfVector X, cfVector Y,
  5998.                                   ui size );
  5999.                 void  VCF_subrReV( cfVector Z, cfVector X, fVector Y,
  6000.                                    ui size );
  6001.                 void  VCFx_subrV( cfVector Z, cfVector X, cfVector Y,
  6002.                                   ui size, fComplex A,  fComplex B );
  6003.                 void  VCFx_subrReV( cfVector Z, cfVector X, fVector Y,
  6004.                                     ui size, fComplex A,  fComplex B );
  6005. Description     normal versions:    Zi  =  Yi  -  Xi
  6006.                 expanded versions:  Zi  =  Yi  -  (A*Xi+B)
  6007.                 The complex floating-point versions exist in two variants: in
  6008.                 the first variant (e.g., VCF_subrV,  VCFx_subrV), X, Y, and Z
  6009.                 are all complex; in the second variant, Y is real-valued
  6010.                 (e.g., VCF_subrReV - "reverse subtraction of a real vector",
  6011.                 i.e., subtraction of a complex vector from a real vector).
  6012. Error handling  floating-point versions: none;
  6013.                 integer versions: see chapter 5.2.
  6014. Return value    none
  6015. See also        VF_subrC,  VF_addV,  VF_mulV,  VF_divV,  VF_visV,  VF_redV
  6016.  
  6017.  
  6018. ┌────────────────────────────────────────────────────────────────────────────┐
  6019. │ VF_subV                  VD_subV                  VE_subV                  │
  6020. │ VCF_subV                 VCD_subV                 VCE_subV                 │
  6021. │ VCF_subReV               VCD_subReV               VCE_subReV               │
  6022. │ VFs_subV                 VDs_subV                 VEs_subV                 │
  6023. │ VFx_subV                 VDx_subV                 VEx_subV                 │
  6024. │ VCFx_subV                VCDx_subV                VCEx_subV                │
  6025. │ VCFx_subReV              VCDx_subReV              VCEx_subReV              │
  6026. │ VI_subV             VSI_subV            VLI_subV            VQI_subV       │
  6027. │ VU_subV             VUS_subV            VUL_subV            VUI_subV       │
  6028. └────────────────────────────────────────────────────────────────────────────┘
  6029. Function        Subtract two vectors
  6030. Syntax          #include <VFmath.h>
  6031.                 void  VF_subV( fVector Z, fVector X, fVector Y, ui size );
  6032.                 void  VFs_subV( fVector Z, fVector X, fVector Y, ui size,
  6033.                                 float C );
  6034.                 void  VFx_subV( fVector Z, fVector X, fVector Y, ui size,
  6035.                                 float A,  float  B );
  6036.                 void  VCF_subV( cfVector Z, cfVector X, cfVector Y, ui size );
  6037.                 void  VCF_subReV( cfVector Z, cfVector X, fVector Y,
  6038.                                   ui size );
  6039.                 void  VCFx_subV( cfVector Z, cfVector X, cfVector Y,
  6040.                                  ui size,  fComplex A,  fComplex B );
  6041.                 void  VCFx_subReV( cfVector Z, cfVector X, fVector Y,
  6042.                                    ui size,  fComplex A,  fComplex B );
  6043. Description     normal versions:      Zi  =  Xi - Yi
  6044.                 scaled versions:      Zi  =  C * (Xi - Yi)
  6045.                 expanded versions:    Zi  =  (A*Xi+B) - Yi
  6046.                 The complex floating-point versions exist in two variants: in
  6047.                 the first variant (e.g., VCF_subV,  VCFx_subV), X, Y, and Z
  6048.                 are all complex; in the second variant, Y is real-valued
  6049.                 (e.g., VCF_subReV - "subtract a real vector").
  6050. Error handling  floating-point versions: none;
  6051.                 integer versions: see chapter 5.2.
  6052. Return value    none
  6053. See also        VF_subC,  VF_addV,  VF_mulV,  VF_divV,  VF_visV,  VF_redV
  6054.  
  6055.  
  6056. ┌────────────────────────────────────────────────────────────────────────────┐
  6057. │ VF_subvector             VD_subvector             VE_subvector             │
  6058. │ VCF_subvector            VCD_subvector            VCE_subvector            │
  6059. │ VI_subvector        VSI_subvector       VLI_subvector       VQI_subvector  │
  6060. │ VU_subvector        VUS_subvector       VUL_subvector       VUI_subvector  │
  6061. └────────────────────────────────────────────────────────────────────────────┘
  6062. Function        Extract a sub-vector from the input vector
  6063. Syntax          #include <VFstd.h>
  6064.                 void  VF_subvector( fVector Y,  ui subsize,
  6065.                                     fVector X,  int samp );
  6066. Description     Y[i]  =  X[i*samp]
  6067.                 A sub-vector Y is extracted from X with a sampling interval
  6068.                 samp. This means that every samp'th element is taken, up to
  6069.                 a total of subsize elements, starting with the zeroth element
  6070.                 of X. Since X may be an expression like XX+1000, samp does
  6071.                 not always need to be positive, but may also take on negative
  6072.                 values (or the trivial value of 0).  X and Y have to be
  6073.                 distinct. Instead of using a samp of 0, 1, or -1, one should
  6074.                 use VF_equC, VF_equV,  or VF_rev,  respectively.
  6075. Error handling  none
  6076. Return value    none
  6077. See also        VF_indpick, VF_CtoRe
  6078.  
  6079.  
  6080. ┌────────────────────────────────────────────────────────────────────────────┐
  6081. │ VF_subvector_...         VD_subvector_...         VE_subvector_...         │
  6082. │ VCF_subvector_...        VCD_subvector_...        VCE_subvector_...        │
  6083. │               ..._addC                 ..._addV                            │
  6084. │               ..._divC                 ..._divV                            │
  6085. │               ..._divrC                ..._divrV                           │
  6086. │               ..._mulC                 ..._mulV                            │
  6087. │               ..._subC                 ..._subV                            │
  6088. │               ..._subrC                ..._subrV                           │
  6089. └────────────────────────────────────────────────────────────────────────────┘
  6090. Function        Arithmetic functions working on a sub-set of elements within
  6091.                 a vector of one of the floating-point data types.
  6092. Syntax          #include <VFmath.h>
  6093.                 void  VF_subvector_addC( fVector Y, ui subsize,
  6094.                                          unsigned samp, float C );
  6095.                 void VF_subvector_addV( fVector Y, ui subsize,
  6096.                                         unsigned samp, fVector X );
  6097.                      (similarly all other functions of this family)
  6098. Description     ..._addC:    Y[i*samp]  +=  C,              i=0,...subsize-1
  6099.                 ..._addV:    Y[i*samp]  +=  Xi,             i=0,...subsize-1
  6100.                 ..._subC:    Y[i*samp]  -=  C,              i=0,...subsize-1
  6101.                 ..._subV:    Y[i*samp]  -=  Xi,             i=0,...subsize-1
  6102.                 ..._subrC:   Y[i*samp]   =  C - Y[i*samp],  i=0,...subsize-1
  6103.                 ..._subrV:   Y[i*samp]   =  Xi- Y[i*samp],  i=0,...subsize-1
  6104.                 ..._mulC:    Y[i*samp]  *=  C,              i=0,...subsize-1
  6105.                 ..._mulV:    Y[i*samp]  *=  Xi,             i=0,...subsize-1
  6106.                 ..._divC:    Y[i*samp]  /=  C,              i=0,...subsize-1
  6107.                 ..._divV:    Y[i*samp]  /=  Xi,             i=0,...subsize-1
  6108.                 ..._divrC:   Y[i*samp]   =  C  / Y[i*samp], i=0,...subsize-1
  6109.                 ..._divrV:   Y[i*samp]   =  Xi / Y[i*samp], i=0,...subsize-1
  6110.                 The operation indicated in the suffix of the function name is
  6111.                 perfomed on a sub-set of the elements of a vector. The
  6112.                 sampling interval is denoted by samp: every samp'th element is
  6113.                 taken, up to a total of subsize, starting with the zeroth one
  6114.                 (that means, subsize is not the total size of the vector, but
  6115.                 rather the size of the sub-set, i.e. the number of elements
  6116.                 for which the function is performed).  Notice that all
  6117.                 operations are performed in place, i.e., the input vector
  6118.                 itself is changed.
  6119.                 For similar functions not included in the above list, the
  6120.                 necessary sequence of calls is similar to the following
  6121.                 example (which shows how to calculate the sinc function of the
  6122.                 zeroth and then every tenth element of X, assuming that size
  6123.                 is an integer multiple of 10):
  6124.                      VF_subvector( Y, size/10, 10, X );
  6125.                      VF_sinc( Y, Y, size/10 );
  6126.                      VF_subvector_equV( X, size/10, 10, Y );
  6127.                 (However, in such cases, you would sometimes prefer the
  6128.                 classic style of a loop with the loop-increment set to 10.
  6129.                 Only if the desired function is not available in the math
  6130.                 library of Borland C, the effort of copying back and forth
  6131.                 into the dummy vector Y will pay off.)
  6132. Error handling  none
  6133. Return value    none
  6134. See also        VF_subvector,  VF_subvector_equC,  VF_subvector_equV,  VF_addC
  6135.  
  6136.  
  6137. ┌────────────────────────────────────────────────────────────────────────────┐
  6138. │ VF_subvector_...         VD_subvector_...         VE_subvector_...         │
  6139. │ VCF_subvector_...        VCD_subvector_...        VCE_subvector_...        │
  6140. │ VI_subvector_...         VSI_subvector_...                                 │
  6141. │ VLI_subvector_...        VQI_subvector_...                                 │
  6142. │ VU_subvector_...         VUS_subvector_...                                 │
  6143. │ VUL_subvector_...        VUI_subvector_...                                 │
  6144. │               ..._equC                 ..._equV                            │
  6145. └────────────────────────────────────────────────────────────────────────────┘
  6146. Function        Initialize a sub-set of elements within a vector either with a
  6147.                 constant value or with values stored as the elements of
  6148.                 another vector.
  6149. Syntax          #include <VFstd.h>
  6150.                 void  VF_subvector_equC( fVector Y, ui subsize,
  6151.                                          unsigned samp, float C );
  6152.                 void  VF_subvector_equV( fVector Y,  ui subsize,
  6153.                                          unsigned samp, fVector X );
  6154.                      (similarly all other functions of this family)
  6155. Description     ..._equC:  Y[i*samp]  =  C,         i=0,...subsize-1
  6156.                 ..._equV:  Y[i*samp]  =  Xi,        i=0,...subsize-1
  6157.                 A sub-set of the elements of a vector is overwritten according
  6158.                 to the sampling interval samp: every samp'th element is
  6159.                 initialized either with the constant C, or with the value
  6160.                 specified as an element of the vector X. A total of subsize
  6161.                 elements is initialized, starting with the zeroth one (that
  6162.                 means, subsize is not the total size of the vector, but rather
  6163.                 the size of the sub-set). VF_subvector_equV is the exact
  6164.                 reverse of VF_subvector.
  6165. Error handling  none
  6166. Return value    none
  6167. See also        VF_subvector,  VF_equC,  VF_equV,  VF_subvector_addC
  6168.  
  6169.  
  6170. ┌────────────────────────────────────────────────────────────────────────────┐
  6171. │ VF_sum                   VD_sum                   VE_sum                   │
  6172. │ VCF_sum                  VCD_sum                  VCE_sum                  │
  6173. │ VI_sum            VSI_sum             VLI_sum             VQI_sum          │
  6174. │ VU_sum            VUS_sum             VUL_sum             VUI_sum          │
  6175. └────────────────────────────────────────────────────────────────────────────┘
  6176. Function        Sum up all the elements of a vector.
  6177. Syntax          #include <VFstd.h>
  6178.                 float  VF_sum(  fVector  X, ui size );
  6179. Description     sum  =  sum( Xi )
  6180.                 The sum over all elements of a vector is calculated and
  6181.                 returned.
  6182. Error handling  none (but be careful: this function may easily overflow!)
  6183. Return value    sum of the vector elements.
  6184. See also        VF_runsum, VF_prod, VF_ssq, VF_ssqdevC, VF_mean
  6185.  
  6186.  
  6187. ┌────────────────────────────────────────────────────────────────────────────┐
  6188. │ VF_sumabs                VD_sumabs                VE_sumabs                │
  6189. └────────────────────────────────────────────────────────────────────────────┘
  6190. Function        Sum up the absolute values of all the elements of a vector.
  6191. Syntax          #include <VFstd.h>
  6192.                 float  VF_sumabs(  fVector  X, ui size );
  6193. Description     sumabs  =  sum(| Xi |)
  6194. Error handling  none (but be careful: this function may easily overflow!)
  6195. Return value    sum of the absolute values of all vector elements.
  6196. See also        VF_sum, VF_meanabs
  6197.  
  6198.  
  6199. ┌────────────────────────────────────────────────────────────────────────────┐
  6200. │ VF_sumdevC               VD_sumdevC               VE_sumdevC               │
  6201. └────────────────────────────────────────────────────────────────────────────┘
  6202. Function        Sum of the absolute deviations from a preset value.
  6203. Syntax          #include <VFstd.h>
  6204.                 float  VF_sumdevC( fVector X, ui size, float C );
  6205. Description     sumdevC  =  sum( |Xi - C| )
  6206. Error handling  none
  6207. Return value    sum of the absolute deviations.
  6208. See also        VF_ssqdevC, VF_sumdevV, VF_avdevC
  6209.  
  6210.  
  6211. ┌────────────────────────────────────────────────────────────────────────────┐
  6212. │ VF_sumdevV               VD_sumdevV               VE_sumdevV               │
  6213. └────────────────────────────────────────────────────────────────────────────┘
  6214. Function        Sum of the absolute deviations of the elements of one
  6215.                 vector from the corresponding elements of another
  6216. Syntax          #include <VFstd.h>
  6217.                 float  VF_sumdevV( fVector X, fVector Y, ui size );
  6218. Description     sumdevV  =  sum( |Xi - Yi| )
  6219. Error handling  none
  6220. Return value    sum of the absolute deviations.
  6221. See also        VF_sum, VF_sumdevC, VF_avdevV, VF_ssqdevV
  6222.  
  6223.  
  6224. ┌────────────────────────────────────────────────────────────────────────────┐
  6225. │ VF_tan                   VD_tan                   VE_tan                   │
  6226. │ VCF_tan                  VCD_tan                  VCE_tan                  │
  6227. │ VFx_tan                  VDx_tan                  VEx_tan                  │
  6228. │ VCFx_tan                 VCDx_tan                 VCEx_tan                 │
  6229. └────────────────────────────────────────────────────────────────────────────┘
  6230. Function        Tangent function
  6231. Syntax          #include <VFmath.h>
  6232.                 int  VF_tan(  fVector  Y,  fVector  X, ui size );
  6233.                 int  VFx_tan( fVector  Y, fVector  X, ui size,
  6234.                              float A, float B, float C );
  6235. Description     normal versions:     Yi  =  tan ( Xi )
  6236.                 expanded versions:   Yi  =  C *  tan( A*Xi+B )
  6237.                 For large values of Xi, round-off error becomes appreciable;
  6238.                 if the Xi values are representable as rational multiples of Pi,
  6239.                 it is better to use VF_tanrpi  than VF_tan.
  6240. Error handling  SING and OVERFLOW errors (for arguments very close to Pi/2)
  6241.                 lead to a default result of ±HUGE_VAL. Precision errors lead
  6242.                 to a default result of 0.0.
  6243. Return value    0, if no error occurred, otherwise non-zero.
  6244. See also        VF_tan2,  VF_tanrpi,  VF_sin,  VF_tanh,  VF_atan,  VF_atan2
  6245.  
  6246.  
  6247. ┌────────────────────────────────────────────────────────────────────────────┐
  6248. │ VF_tan2                  VD_tan2                  VE_tan2                  │
  6249. │ VFx_tan2                 VDx_tan2                 VEx_tan2                 │
  6250. └────────────────────────────────────────────────────────────────────────────┘
  6251. Function        Square of the tangent function
  6252. Syntax          #include <VFmath.h>
  6253.                 int  VF_tan2(  fVector  Y,  fVector  X, ui size );
  6254.                 int  VFx_tan2( fVector  Y,  fVector  X, ui size,
  6255.                                float A, float B, float C );
  6256. Description     normal versions:    Yi  =  tan²( Xi )
  6257.                 expanded versions:  Yi  =  C * tan²( A*Xi+B )
  6258.                 Calculating the squared trigonometric functions directly is
  6259.                 faster and sometimes more accurate than first calculating the
  6260.                 trigonometric function itself and squaring it afterwards.
  6261. Error handling  SING and OVERFLOW errors (for arguments close to Pi/2) lead
  6262.                 to a default result of ±HUGE_VAL. Precision errors lead to a
  6263.                 default result of 0.0.
  6264. Return value    0, if no error occurred, otherwise non-zero.
  6265. See also        VF_tan,   VF_tanrpi,   sin
  6266.  
  6267.  
  6268. ┌────────────────────────────────────────────────────────────────────────────┐
  6269. │ VF_tanh                  VD_tanh                  VE_tanh                  │
  6270. │ VCF_tanh                 VCD_tanh                 VCE_tanh                 │
  6271. │ VFx_tanh                 VDx_tanh                 VEx_tanh                 │
  6272. │ VCFx_tanh                VCDx_tanh                VCEx_tanh                │
  6273. └────────────────────────────────────────────────────────────────────────────┘
  6274. Function        Hyperbolic tangent function
  6275. Syntax          #include <VFmath.h>
  6276.                 int  VF_tanh(  fVector  Y,  fVector  X, ui size );
  6277.                 int  VFx_tanh( fVector  Y,  fVector  X, ui size,
  6278.                                float A, float B, float C );
  6279. Description     normal versions:   Yi = tanh( Xi )
  6280.  
  6281.                                          exp( Xi ) - exp( -Xi )
  6282.                                       =  ──────────────────────
  6283.                                          exp( Xi ) + exp( -Xi )
  6284.  
  6285.                 expanded versions: Yi = C * tanh( A*Xi+B )
  6286. Error handling  These functions should be error-proof.
  6287. Return value    always 0.
  6288. See also        VF_sinh,  VF_exp,   tanh
  6289.  
  6290.  
  6291. ┌────────────────────────────────────────────────────────────────────────────┐
  6292. │ VF_tanrpi                VD_tanrpi                VE_tanrpi                │
  6293. │ VF_tanrpi2               VD_tanrpi2               VE_tanrpi2               │
  6294. │ VF_tanrpi3               VD_tanrpi3               VE_tanrpi3               │
  6295. └────────────────────────────────────────────────────────────────────────────┘
  6296. Function        Tangent function of fractional multiples of Pi
  6297. Syntax          #include <VFmath.h>
  6298.                 int  VF_tanrpi(  fVector Y, iVector P, ui size, int q );
  6299.                 int  VF_tanrpi2( fVector Y, iVector P, ui size, int q );
  6300.                 int  VF_tanrpi3( fVector Y, iVector P, ui size, int q );
  6301. Description     Yi  =  tan( (P[i] / q) * Pi )
  6302.                 The tangent of fractional multiples of Pi is calculated. There
  6303.                 are three versions: VF_tanrpi is for general use with any
  6304.                 arbitrary denominator q. If q is a power of 2,  VF_tanrpi2
  6305.                 should be used which is a highly optimized version using a
  6306.                 look-up table. If q is a multiple of 3,  VF_tanrpi3 should be
  6307.                 used. VF_tanrpi2 and VF_tanrpi3 work also with q values they
  6308.                 are not optimized for; in this case, however, memory space is
  6309.                 wasted for the then useless tables.
  6310. Error handling  SING errors occur if P[i] / q  is an odd multiple of 1/2; the
  6311.                 default result is 0.0 (which is the mean of +HUGE_VAL and
  6312.                 -HUGE_VAL).
  6313.                 q must be non-zero; this is, however, not tested for.
  6314. Return value    0, if no error occurred, otherwise non-zero.
  6315. See also        VF_tan,   tan
  6316.  
  6317.  
  6318. ┌────────────────────────────────────────────────────────────────────────────┐
  6319. │ VF_tantab2               VD_tantab2               VE_tantab2               │
  6320. │ VF_tantab3               VD_tantab3               VE_tantab3               │
  6321. └────────────────────────────────────────────────────────────────────────────┘
  6322.                 Table of tangent values for arguments between 0 and Pi/2.
  6323. Syntax          #include <xmath.h>
  6324.                 extern float     VF_tantab2[ VF_tabsz2+1 ];
  6325.                 extern double    VD_tantab2[ VD_tabsz2+1 ];
  6326.                 extern extended  VE_tantab2[ VE_tabsz2+1 ];
  6327.                 extern float     VF_tantab3[ VF_tabsz3+1 ];
  6328.                 extern double    VD_tantab3[ VD_tabsz3+1 ];
  6329.                 extern extended  VE_tantab3[ VE_tabsz3+1 ];
  6330. Description     VF_tantab2[ i ]  =  tan( i/(2*VF_tabsz2) * Pi ),
  6331.                                                       i=0,...,VF_tabsz2-1
  6332.                 VF_tantab3[ i ]  =  tan( i/(2*VF_tabsz3) * Pi ),
  6333.                                                       i=0,...,VF_tabsz3-1
  6334.                 VF_tantab2[ VF_tabsz2 ]  =  VF_tantab3[ VF_tabsz3 ] = 0;
  6335.  
  6336.                 These look-up tables of tangent values for arguments between 0
  6337.                 and Pi/2 are used by VF_tanrpi2 and the other functions of
  6338.                 that family and are also available for other purposes. Since
  6339.                 the tangent of Pi/2 is not defined, zero is stored at its
  6340.                 place. The symbols VF_tabsz2 etc., denoting the size of the
  6341.                 tables, are defined in <xmath.h>.
  6342. See also        VF_tanrpi2,  VF_sintab2,  VF_cosectab2
  6343.  
  6344.  
  6345. ┌────────────────────────────────────────────────────────────────────────────┐
  6346. │ VF_trunc                 VD_trunc                 VE_trunc                 │
  6347. │ VF_trunctoI              VD_trunctoI              VE_trunctoI              │
  6348. │ VF_trunctoSI             VD_trunctoSI             VE_trunctoSI             │
  6349. │ VF_trunctoLI             VD_trunctoLI             VE_trunctoLI             │
  6350. │ VF_trunctoQI             VD_trunctoQI             VE_trunctoQI             │
  6351. │ VF_trunctoU              VD_trunctoU              VE_trunctoU              │
  6352. │ VF_trunctoUS             VD_trunctoUS             VE_trunctoUS             │
  6353. │ VF_trunctoUL             VD_trunctoUL             VE_trunctoUL             │
  6354. │ VF_trunctoUI             VD_trunctoUI             VE_trunctoUI             │
  6355. └────────────────────────────────────────────────────────────────────────────┘
  6356. Function        Rounding by "truncating" toward zero.
  6357. Syntax          #include <VFmath.h>
  6358.                 int VF_trunc(     fVector Y,  fVector X,  ui size );
  6359.                 int VF_trunctoI(  iVector Y,  fVector X,  ui size );
  6360.                 int VF_trunctoU(  uVector Y,  fVector X,  ui size );
  6361.                      (similarly  all other functions of this family)
  6362. Description     These functions are identical to those of the VF_chop family.
  6363.                 They have been defined in order to maintain consistency with
  6364.                 the function name trunc defined in Turbo Pascal. For details,
  6365.                 see VF_chop.
  6366.  
  6367.  
  6368. ┌────────────────────────────────────────────────────────────────────────────┐
  6369. │ V_UtoF                   V_UtoD                   V_UtoE                   │
  6370. │ V_UItoF                  V_UItoD                  V_UItoE                  │
  6371. │ V_ULtoF                  V_ULtoD                  V_ULtoE                  │
  6372. │ V_UStoF                  V_UStoD                  V_UStoE                  │
  6373. └────────────────────────────────────────────────────────────────────────────┘
  6374. Function        Data type interconversions.  See V_ItoF!
  6375.  
  6376.  
  6377. ┌────────────────────────────────────────────────────────────────────────────┐
  6378. │ VF_varianceC             VD_varianceC             VE_varianceC             │
  6379. └────────────────────────────────────────────────────────────────────────────┘
  6380. Function        Variance of a one-dimensional distribution with respect to a
  6381.                 pre-set value
  6382. Syntax          #include <VFstd.h>
  6383.                 float  VF_varianceC( fVector X, ui size, float C );
  6384. Description     var  = (1 / size) * sum( (Xi - C)² )
  6385. Error handling  none
  6386. Return value    The variance is returned.
  6387. See also        VF_mean, VF_varianceV, VF_ssq, VF_ssqdevC, VF_linregress
  6388.  
  6389.  
  6390. ┌────────────────────────────────────────────────────────────────────────────┐
  6391. │ VF_varianceCwW           VD_varianceCwW           VE_varianceCwW           │
  6392. └────────────────────────────────────────────────────────────────────────────┘
  6393. Function        "Variance with weights" of a one-dimensional distribution with
  6394.                 respect to a pre-set value.
  6395. Syntax          #include <VFstd.h>
  6396.                 float  VF_varianceCwW( fVector X, fVector Wt, ui size,
  6397.                                        float C );
  6398. Description     var  =  (1 / sum( Wti )) * sum(  Wti * (Xi - C)² )
  6399.                 The weights need not be normalized.
  6400. Error handling  none
  6401. Return value    variance of the distribution.
  6402. See also        VF_meanwW, VF_varianceC, VF_varianceVwW, VF_linregress
  6403.  
  6404.  
  6405. ┌────────────────────────────────────────────────────────────────────────────┐
  6406. │ VF_varianceV             VD_varianceV             VE_varianceV             │
  6407. └────────────────────────────────────────────────────────────────────────────┘
  6408. Function        Variance between two one-dimensional distributions.
  6409. Syntax          #include <VFstd.h>
  6410.                 float  VF_varianceV( fVector X, fVector Y, ui size );
  6411. Description     var  = (1 / size) * sum( (Xi - Yi)² )
  6412. Error handling  none
  6413. Return value    The variance is returned.
  6414. See also        VF_mean, VF_varianceC,  VF_ssq, VF_ssqdevV, VF_linregress
  6415.  
  6416.  
  6417. ┌────────────────────────────────────────────────────────────────────────────┐
  6418. │ VF_varianceVwW           VD_varianceVwW           VE_varianceVwW           │
  6419. └────────────────────────────────────────────────────────────────────────────┘
  6420. Function        "Variance with weights" between two one-dimensional
  6421.                 distributions.
  6422. Syntax          #include <VFstd.h>
  6423.                 float  VF_varianceVwW( fVector X, fVector Y,
  6424.                                        fVector Wt, ui size );
  6425. Description     var  = (1 / sum( Wti )) * sum( Wti * (Xi - Yi)² )
  6426.                 The weights need not be normalized.
  6427. Error handling  none
  6428. Return value    weighted variance
  6429. See also        VF_meanwW,  VF_chi2, VF_varianceV, VF_varianceCwW,
  6430.                 VF_linregress
  6431.  
  6432.  
  6433. ┌────────────────────────────────────────────────────────────────────────────┐
  6434. │ VF_vector                VD_vector                VE_vector                │
  6435. │ VCF_vector               VCD_vector               VCE_vector               │
  6436. │ VI_vector         VSI_vector          VLI_vector          VQI_vector       │
  6437. │ VU_vector         VUS_vector          VUL_vector          VUI_vector       │
  6438. └────────────────────────────────────────────────────────────────────────────┘
  6439. Function        Memory allocation for a vector
  6440. Syntax          #include <VFstd.h>
  6441.                 fVector   VF_vector(  ui size );
  6442. Description     Based on memory model and environment, the most appropriate
  6443.                 allocation procedure is chosen by these functions. Failure to
  6444.                 allocate memory always leads to an error message and a
  6445.                 subsequent program abort (similar to the error handling of the
  6446.                 "new" operator in C++). To release the memory thus allocated,
  6447.                 V_free or V_nfree should be used. Notice: the declaration of a
  6448.                 vector (e.g., as fVector) reserves only a name, but no memory!
  6449.                 See chapter 4.1 if you are interested in details of the
  6450.                 implementation.
  6451. Error handling  If there is not enough memory available, or if size is zero,
  6452.                 an error message "Not enough memory" is displayed and the
  6453.                 program aborted.
  6454.                 Models SMALL, MEDIUM, COMPACT, and LARGE only:
  6455.                   If more than 64 kB of memory are requested,
  6456.                   an error message "Vector > 64 kB not possible" is displayed
  6457.                   and the program aborted.
  6458. Return value    Pointer to the allocated memory
  6459. See also        malloc, calloc
  6460.  
  6461.  
  6462. ┌────────────────────────────────────────────────────────────────────────────┐
  6463. │ VF_vector0               VD_vector0               VE_vector0               │
  6464. │ VCF_vector0              VCD_vector0              VCE_vector0              │
  6465. │ VI_vector0        VSI_vector0         VLI_vector0         VQI_vector0      │
  6466. │ VU_vector0        VUS_vector0         VUL_vector0         VUI_vector0      │
  6467. └────────────────────────────────────────────────────────────────────────────┘
  6468. Function        Memory allocation for a vector and initialization of all
  6469.                 elements with 0
  6470. Syntax          #include <VFstd.h>
  6471.                 fVector   VF_vector0(  ui size );
  6472. Description     The functions of this family are almost identical to those of
  6473.                 the VF_vector family; in addition to allocating memory, they
  6474.                 initialize all elements with 0. (Calls to VF_vector and
  6475.                 VF_vector0  may be mixed; they use the same tables to keep
  6476.                 track of the handles and pointers).  For further information,
  6477.                 see VF_vector.
  6478. Error handling  If there is not enough memory available, or if size is zero,
  6479.                 an error message "Not enough memory" is displayed and the
  6480.                 program aborted.
  6481.                 Models SMALL, MEDIUM, COMPACT, and LARGE only:
  6482.                   If more than 64 kB of memory are requested,
  6483.                   an error message "Vector > 64 kB not possible" is displayed
  6484.                   and the program aborted.
  6485. Return value    A pointer to the allocated memory is returned.
  6486. See also        malloc, calloc
  6487.  
  6488.  
  6489. ┌────────────────────────────────────────────────────────────────────────────┐
  6490. │ VF_visC                  VD_visC                  VE_visC                  │
  6491. └────────────────────────────────────────────────────────────────────────────┘
  6492. Function        Visibility (or contrast) function of a vector with respect to
  6493.                 a constant
  6494. Syntax          #include <VFmath.h>
  6495.                 void  VF_visC( fVector Y, fVector X, ui size, float C );
  6496. Description     Yi  =  vis( Xi, C )  =  (Xi - C) / (Xi + C)
  6497.                 These functions are generalizations of the "visibility" or
  6498.                 "contrast" function used in optics, where the contrast between
  6499.                 two intensities is defined as their difference divided by
  6500.                 their sum.
  6501.                 For Xi=C, the visibility is defined as 0, even in the case
  6502.                 of Xi=C=0.
  6503. Error handling  none
  6504. Return value    none
  6505. See also        VF_redV,  VF_addC,  VF_subC,  VF_divC,  VF_visC
  6506.  
  6507.  
  6508. ┌────────────────────────────────────────────────────────────────────────────┐
  6509. │ VF_visV                  VD_visV                  VE_visV                  │
  6510. │ VFx_visV                 VDx_visV                 VEx_visV                 │
  6511. └────────────────────────────────────────────────────────────────────────────┘
  6512. Function        Visibility function of one vector with respect to another
  6513. Syntax          #include <VFmath.h>
  6514.                 void  VF_visV( fVector Z,   fVector X,  fVector Y, ui size );
  6515.                 void  VFx_visV( fVector Z,   fVector X,  fVector Y,
  6516.                                 ui size,  float  A,  float  B );
  6517. Description     normal versions:   Zi  =  vis( Xi, Yi )
  6518.                                        =  (Xi - Yi) / (Xi + Yi)
  6519.                 expanded versions: Zi  =  vis( A*Xi+B, Yi )
  6520.                 For Xi=Yi, the visibility is defined as 0, even in the case
  6521.                 of Xi=Yi=0.
  6522. Error handling  none
  6523. Return value    none
  6524. See also        VF_visC,  VF_addV,  VF_subV,  VF_divV,  VF_redV
  6525.  
  6526.  
  6527. ┌────────────────────────────────────────────────────────────────────────────┐
  6528. │ VF_Welch                 VD_Welch                 VE_Welch                 │
  6529. └────────────────────────────────────────────────────────────────────────────┘
  6530. Function        "Welch" window for use in spectral analysis
  6531. Syntax          #include <VFstd.h>
  6532.                 void VF_Welch(  fVector X, ui size );
  6533. Description     Xi  = 1 - ( (i - 0.5*(size - 1)) / (0.5*(size + 1)) )²
  6534. Error handling  none
  6535. Return value    none
  6536. See also        VF_Parzen, VF_Hanning, VF_spectrum
  6537.  
  6538.  
  6539. ┌────────────────────────────────────────────────────────────────────────────┐
  6540. │ VF_write                 VD_write                 VE_write                 │
  6541. │ VCF_write                VCD_write                VCE_write                │
  6542. │ VI_write          VSI_write           VLI_write           VQI_write        │
  6543. │ VU_write          VUS_write           VUL_write           VUI_write        │
  6544. └────────────────────────────────────────────────────────────────────────────┘
  6545. Function        Write a vector in ASCII format to a stream.
  6546. Syntax          #include <VFstd.h>
  6547.                 void VF_write(  FILE *stream, fVector X, ui size );
  6548. Description     size elements of X are written to stream in ASCII format.
  6549.                 By default, one element is written per line. To use these
  6550.                 functions, stream must already be open for write operations
  6551.                 in text format.
  6552.  
  6553.                 The number format and the separation of consecutive elements
  6554.                 may be specified using VF_setWriteFormat and
  6555.                 VF_setWriteSeparate, respectively. See these functions
  6556.                 for details.
  6557.  
  6558.                 Storing data in ASCII format is useful if the data have to be
  6559.                 readable by human eyes, or if they are to be exported into
  6560.                 other programs which are not able to read machine-format
  6561.                 numbers. If avoidable, these functions should not be used for
  6562.                 the storage of intermediate results that later have again to
  6563.                 be read in. Instead, the function pairs of the VF_store /
  6564.                 VF_recall  family are recommended for the following reasons:
  6565.                 conversion into ASCII format is slow, may lead to round-off
  6566.                 errors, and requires much more disk memory than storage in
  6567.                 machine format.
  6568. Error handling  none
  6569. Return value    none
  6570. See also        VF_setWriteFormat, VF_setWriteSeparate, VF_nwrite, VF_read,
  6571.                 VF_store, fprintf, VF_cprint, VF_print
  6572.  
  6573.  
  6574. ┌────────────────────────────────────────────────────────────────────────────┐
  6575. │ VF_xcorr                 VD_xcorr                 VE_xcorr                 │
  6576. └────────────────────────────────────────────────────────────────────────────┘
  6577. Function        Cross-correlation function of two vectors.
  6578. Syntax          #include <VFstd.h>
  6579.                 void VF_xcorr(  fVector Z, fVector X, fVector Y, ui size );
  6580. Description     The cross-correlation function (CCF) of X and Y is calculated
  6581.                 and stored in Z  in wrap-around order: Z[0] to Z[size/2-1]
  6582.                 contain the CCF for zero and positive lags. Beginning with
  6583.                 the most negative lag in Z[size/2+1], the elements up to
  6584.                 Z[size-1] contain the CCF for negative lags. Since this
  6585.                 function assumes X to be periodic, the CCF for the most
  6586.                 positive lag is identical to the CCF for the most negative
  6587.                 lag. This element is stored as Z[size/2].
  6588.                 To get the CCF into normal order, you may call
  6589.                    VF_rotate( Z, Z, size, size/2 );
  6590.                 After that, the zero point is at the position size/2.
  6591.  
  6592.                 In case X is non-periodic, end effects should be avoided
  6593.                 by the methods described in connection with VF_convolve.
  6594.  
  6595.                 About special versions with the prefixes  VFs_  and VFl_,
  6596.                 consult chapter 4.8.
  6597. Error handling  If size is not a power of 2,  VF_FFT  (on which VF_xcorr
  6598.                 is based) complains "Size must be an integer power of 2"
  6599.                 and the program is aborted.
  6600. Return value    none
  6601. See also        VF_FFT,  VF_convolve,  VF_autocorr, VF_spectrum
  6602.  
  6603.  
  6604. ┌────────────────────────────────────────────────────────────────────────────┐
  6605. │ VI_xor              VSI_xor             VLI_xor             VQI_xor        │
  6606. │ VU_xor              VUS_xor             VUL_xor             VUI_xor        │
  6607. └────────────────────────────────────────────────────────────────────────────┘
  6608. Function        Bit-wise "XOR" operation.
  6609. Syntax          #include <VImath.h>
  6610.                 void VI_xor(  iVector Y, iVector X, ui size,  int C );
  6611.                 void VUL_xor( ulVector Y, ulVector X,  ui size,
  6612.                               unsigned long C );
  6613. Description     Yi  =  (Xi) ^ C
  6614.                 The bit-wise "exclusive OR" operation is performed on each
  6615.                 element Xi with the bit-mask given by C  (i.e., a bit is 0 in
  6616.                 Yi, if it was either 0 or 1 both in Xi and C simultaneously.
  6617.                 It is 1 if  Xi and C differed in this bit position).
  6618. Error handling  none
  6619. Return value    none
  6620. See also        VI_not,  VI_and,  VI_or
  6621.  
  6622.  
  6623. ┌────────────────────────────────────────────────────────────────────────────┐
  6624. │ VF_xprod                 VD_xprod                 VE_xprod                 │
  6625. └────────────────────────────────────────────────────────────────────────────┘
  6626. Function        Cross-product of two vectors.
  6627. Syntax          #include <VFstd.h>
  6628.                 void VF_xprod( fVector Z, fVector X, fVector Y );
  6629. Description     Z  =  X x Y
  6630.                 The cross- product of X and Y is calculated. Since this
  6631.                 operation is defined specifically for vectors representing
  6632.                 three dimensions in the geometrical sense, there is no
  6633.                 parameter "size" for this function. The number of elements
  6634.                 is 3 for each of the participating vectors, implicitly.
  6635. Error handling  none
  6636. Return value    none
  6637. See also        VF_scalprod, VF_Euclid
  6638.  
  6639.  
  6640. ┌────────────────────────────────────────────────────────────────────────────┐
  6641. │ VF_xyAutoPlot            VD_xyAutoPlot            VE_xyAutoPlot            │
  6642. │ VI_xyAutoPlot     VSI_xyAutoPlot       VLI_xyAutoPlot      VQI_xyAutoPlot  │
  6643. │ VU_xyAutoPlot     VUS_xyAutoPlot       VUL_xyAutoPlot      VUI_xyAutoPlot  │
  6644. └────────────────────────────────────────────────────────────────────────────┘
  6645. Function        Draws a Cartesian coordinate system and plots a Y-vector
  6646.                 against an X-vector into it.
  6647. Syntax          #include <Vgraph.h>
  6648.                 void VF_xyAutoPlot(  fVector X,  fVector Y,  ui size,
  6649.                                      unsigned form,   COLORREF color );
  6650. Description     A Cartesian coordinate system is drawn with automatic scaling
  6651.                 of the axes and the vector Y is plotted against the vector X.
  6652.                 Prior to calling VF_xyAutoPlot, the plotting routines have to
  6653.                 be initialized by V_initGraph (for DOS programs) or V_initPlot
  6654.                 (DOS or Windows programs).
  6655.  
  6656.                 The style of the plot is determined by the parameter form
  6657.                 which should be constructed using the symbolic constants
  6658.                 defined in <Vgraph.h>. For the line styles, either the BGI
  6659.                 notation or the Windows notation may be used both in DOS and
  6660.                 Windows programs; the necessary macros for the translation are
  6661.                 included in <Vgraph.h>.
  6662.  
  6663.                 1. Style of lines connecting adjacent data points:
  6664.                   PS_SOLID         SOLID_LINE            ____   (default)
  6665.                   PS_DOT           DOTTED_LINE           · · ·
  6666.                   PS_DASH          DASHED_LINE           - - -
  6667.                   PS_DASHDOT       CENTER_LINE           -·-·-
  6668.                   PS_DASHDOTDOT                          -··-··
  6669.                   PS_NULL          NULL_LINE             (no line at all)
  6670.  
  6671.                 2. Symbols used to mark data points:
  6672.                   SY_NULL              (no symbol at all)       (default)
  6673.                   SY_CROSS                   x
  6674.                   SY_PLUS                    +
  6675.                   SY_STAR                    *
  6676.                   SY_CIRCLE                  o
  6677.                   SY_BOX                     ▄
  6678.                   SY_DIAMOND                   
  6679.                   SY_TRIANGLEUP              
  6680.                   SY_TRIANGLEDOWN            
  6681.                      (if you loaded this file into a Windows program, some
  6682.                       symbols may have been lost during character conversion)
  6683.  
  6684.                 3. Fill-style of the symbols:
  6685.                   SY_HOLLOW         (no filling)              (default)
  6686.                   SY_FILLED         (filled)
  6687.                   SY_DOTTED         (hollow, with a dot at the exact
  6688.                                      position of the data point)
  6689.  
  6690.                 The parameter form has to be constructed by adding the
  6691.                 appropriate line style, the symbol and its fill-style, e.g.
  6692.                 (SOLID_LINE + SY_TRIANGLEUP). Alternatively, the bit-wise "OR"
  6693.                 operation may be used,  e.g.  (PS_SOLID | SY_CIRCLE |
  6694.                 SY_DOTTED).
  6695.  
  6696.                 If any of the line styles except NULL_LINE (or PS_NULL) is
  6697.                 chosen, each data point will be represented by at least one
  6698.                 pixel in DOS programs. Therefore, dotted or broken lines
  6699.                 should be specified only if there are not too many data
  6700.                 points. Otherwise, all line styles will eventually look like
  6701.                 SOLID_LINE. In Windows programs, these line styles will always
  6702.                 be plotted correctly and points will be left out if necessary.
  6703.  
  6704.                 Notice that  NULL_LINE or PS_NULL has to be explicitly
  6705.                 specified, if the data points are not to be connected by
  6706.                 lines. Just writing, e.g. (SY_BOX | SY_HOLLOW) would be
  6707.                 interpreted as using the default line style, which is
  6708.                 SOLID_LINE.
  6709.  
  6710.                 SY_NULL and SY_HOLLOW need not be specified, since these are
  6711.                 the default symbol and fill-style, resp. For SY_NULL,
  6712.                 SY_CROSS, SY_PLUS and SY_STAR, the choice of fill-style has no
  6713.                 effect.
  6714.  
  6715.                 The parameter color denotes the color that is to be used for
  6716.                 the plot (the data type COLORREF is unsigned for DOS programs
  6717.                 and unsigned long for Windows programs). See the Borland C++
  6718.                 function setcolor for a description of the colors available in
  6719.                 the various graphics modes under DOS. For Windows, the colors
  6720.                 BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
  6721.                 DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED,
  6722.                 LIGHTMAGENTA, YELLOW, and WHITE are defined in <Vgraph.h> by
  6723.                 analogy with the COLORS defined in <graphics.h> for the BGI
  6724.                 routines, i.e. for DOS programs. Thereby, portability between
  6725.                 DOS and Windows programs is improved. For programs designed to
  6726.                 run exclusively under Windows, it is nevertheless recommended
  6727.                 to use fine-tuned colors defined by the RGB macro, instead of
  6728.                 the predefined colors.
  6729.  
  6730.                 The size of the symbols may be modified with the function
  6731.                 V_setSymbolSize. The thickness of the lines may be modified
  6732.                 using V_setLineThickness.
  6733.  
  6734. Example of a DOS program:
  6735.                 #include <VFstd.h>
  6736.                 #include <VFmath.h>
  6737.                 #include <Vgraph.h>
  6738.                 #include <conio.h>
  6739.                 void main( void )
  6740.                 {
  6741.                      ui       size=101;
  6742.                      fVector  X,  Y1,   Y2;
  6743.  
  6744.                      V_initGraph( "C:\\BorlandC\\BGI\\" );
  6745.                             /* Be sure the path is correct! */
  6746.                      X  = VF_vector( size );
  6747.                      Y1 = VF_vector( size );
  6748.                      Y2 = VF_vector( size );
  6749.                      VF_ramp( X, size, -1.0, 2.0/100 );
  6750.                      VFx_sincos( Y1, Y2, X, size, 3.1415927, 0.0, 1.0 );
  6751.                      VF_xyAutoPlot( X, Y1, size,
  6752.                                     PS_SOLID | SY_CROSS,
  6753.                                     LIGHTGREEN );
  6754.                      VF_xyDataPlot( X, Y2, size,
  6755.                                     PS_SOLID | SY_CIRCLE | SY_DOTTED,
  6756.                                     LIGHTRED );
  6757.                      getch();      /* interrupt execution while watching;
  6758.                                       then press any key  */
  6759.                      closegraph();
  6760.                      V_nfree( 3, Y2, Y1, X );
  6761.                 }
  6762.  
  6763.                 Under Windows, call V_initPlot instead of V_initGraph, before
  6764.                 performing plotting operations.
  6765. Error handling  none
  6766. Return value    none
  6767. See also        VF_xyAutoPlot,  VF_yAutoPlot,  VCF_autoPlot, V_drawAxes,
  6768.                 V_findAxes, V_setSymbolSize,  chapter 4.11
  6769.  
  6770.  
  6771. ┌────────────────────────────────────────────────────────────────────────────┐
  6772. │ VF_xy2AutoPlot           VD_xy2AutoPlot           VE_xy2AutoPlot           │
  6773. │ VI_xy2AutoPlot    VSI_xy2AutoPlot      VLI_xy2AutoPlot     VQI_xy2AutoPlot │
  6774. │ VU_xy2AutoPlot    VUS_xy2AutoPlot      VUL_xy2AutoPlot     VUI_xy2AutoPlot │
  6775. └────────────────────────────────────────────────────────────────────────────┘
  6776. Function        Draws a Cartesian coordinate system and plots two X-Y vector
  6777.                 pairs into it.
  6778. Syntax          #include <Vgraph.h>
  6779.                 void VF_xy2AutoPlot(   fVector X1, fVector Y1, ui size1,
  6780.                                        unsigned form1, COLORREF color1,
  6781.                                        fVector X2, fVector Y2, ui size2,
  6782.                                        unsigned form2, COLORREF color2 );
  6783. Description     The vector Y1 is plotted against the vector X1 and Y2 against
  6784.                 X2 after automatically drawing a Cartesian coordinate system.
  6785.                 For a description of the parameters form1, form2, and color1,
  6786.                 color2, see VF_xyAutoPlot. Prior to calling VF_xy2AutoPlot,
  6787.                 the plotting routines have to be initialized by V_initGraph or
  6788.                 V_initPlot.
  6789. Error handling  none
  6790. Return value    none
  6791. See also        VF_xyAutoPlot,  VF_yAutoPlot,  VCF_autoPlot, V_drawAxes,
  6792.                 V_findAxes
  6793.  
  6794.  
  6795. ┌────────────────────────────────────────────────────────────────────────────┐
  6796. │ VF_xyDataPlot            VD_xyDataPlot            VE_xyDataPlot            │
  6797. │ VI_xyDataPlot     VSI_xyDataPlot       VLI_xyDataPlot      VQI_xyDataPlot  │
  6798. │ VU_xyDataPlot     VUS_xyDataPlot       VUL_xyDataPlot      VUI_xyDataPlot  │
  6799. └────────────────────────────────────────────────────────────────────────────┘
  6800. Function        X-Y-plot into an existing Cartesian coordinate system.
  6801. Syntax          #include <Vgraph.h>
  6802.                 void VF_xyDataPlot( fVector X,  fVector Y,  ui size,
  6803.                                     unsigned form,  COLORREF color );
  6804. Description     The vector Y is plotted against the vector X into a Cartesian
  6805.                 coordinate system drawn by a prior call to one of the AutoPlot
  6806.                 functions or to V_drawAxes. For a description of the parameters
  6807.                 form and color, see VF_xyAutoPlot.
  6808. Error handling  none
  6809. Return value    none
  6810. See also        VF_xyAutoPlot,  VF_yAutoPlot,  VCF_autoPlot, V_drawAxes,
  6811.                 V_findAxes
  6812.  
  6813.  
  6814. ┌────────────────────────────────────────────────────────────────────────────┐
  6815. │ VF_yAutoPlot             VD_yAutoPlot             VE_yAutoPlot             │
  6816. │ VI_yAutoPlot      VSI_yAutoPlot        VLI_yAutoPlot       VQI_yAutoPlot   │
  6817. │ VU_yAutoPlot      VUS_yAutoPlot        VUL_yAutoPlot       VUI_yAutoPlot   │
  6818. └────────────────────────────────────────────────────────────────────────────┘
  6819. Function        Draws a Cartesian coordinate system and plots each element of
  6820.                 a Y-vector against its index.
  6821. Syntax          #include <Vgraph.h>.
  6822.                 void VF_yAutoPlot( fVector Y, ui size,
  6823.                                    unsigned form, COLORREF color );
  6824. Description     A Cartesian coordinate system is automatically scaled and
  6825.                 drawn. Each element of the vector Y is plotted against its
  6826.                 index into this coordinate system. For a description of the
  6827.                 parameters form and color, see VF_xyAutoPlot. The plotting
  6828.                 routines have to be initialized by V_initGraph or V_initPlot
  6829.                 prior to calling VF_yAutoPlot.
  6830. Error handling  none
  6831. Return value    none
  6832. See also        VF_yDataPlot,  VF_y2AutoPlot,   VF_xyAutoPlot, VCF_autoPlot,
  6833.                 V_drawAxes, V_findAxes,  chapter 4.11
  6834.  
  6835.  
  6836. ┌────────────────────────────────────────────────────────────────────────────┐
  6837. │ VF_y2AutoPlot            VD_y2AutoPlot            VE_y2AutoPlot            │
  6838. │ VI_y2AutoPlot     VSI_y2AutoPlot       VLI_y2AutoPlot      VQI_y2AutoPlot  │
  6839. │ VU_y2AutoPlot     VUS_y2AutoPlot       VUL_y2AutoPlot      VUI_y2AutoPlot  │
  6840. └────────────────────────────────────────────────────────────────────────────┘
  6841. Function        Draws a Cartesian coordinate system and plots two Y-vectors,
  6842.                 taking the index as the X-axis.
  6843. Syntax          #include <Vgraph.h>
  6844.                 void VF_y2AutoPlot(   fVector Y1, ui size1,
  6845.                                       unsigned form1, COLORREF color1,
  6846.                                       fVector Y2, ui size2,
  6847.                                       unsigned form2, COLORREF color2 );
  6848. Description     A Cartesian coordinate system is automatically scaled and
  6849.                 drawn. Each element of the vectors Y1 and Y2 is plotted at the
  6850.                 X-position given by its index. For a description of the
  6851.                 parameters form1, form2, and color1, color2, see
  6852.                 VF_xyAutoPlot. The plotting routines have to be initialized by
  6853.                 V_initGraph or V_initPlot prior to calling VF_yAutoPlot.
  6854. Error handling  none
  6855. Return value    none
  6856. See also        VF_yDataPlot,  VF_y2AutoPlot,   VF_xyAutoPlot, VCF_autoPlot,
  6857.                 V_drawAxes, V_findAxes,  chapter 4.11
  6858.  
  6859.  
  6860. ┌────────────────────────────────────────────────────────────────────────────┐
  6861. │ VF_yDataPlot             VD_yDataPlot             VE_yDataPlot             │
  6862. │         VI_        VBI_        VSI_        VLI_        VQI_                │
  6863. │         VU_        VUB_        VUS_        VUL_        VUI_                │
  6864. └────────────────────────────────────────────────────────────────────────────┘
  6865. Function        Plots a Y-vector into an existing Cartesian coordinate system,
  6866.                 taking the index as the X-axis.
  6867. Syntax          #include <Vgraph.h>
  6868.                 void VF_yDataPlot(   fVector Y, ui size,
  6869.                                      unsigned form, COLORREF color );
  6870. Description     Each element of the vector Y is plotted into a Cartesian
  6871.                 coordinate system that has to be already drawn by a prior call
  6872.                 to one of the AutoPlot functions or to V_drawAxes. The X-
  6873.                 position is given by the index of the Y-element to be plotted.
  6874.                 For a description of the parameters form and color, see
  6875.                 VF_xyAutoPlot.
  6876. Error handling  none
  6877. Return value    none
  6878. See also        VF_yAutoPlot,  VF_y2AutoPlot,   VF_xyAutoPlot, VCF_autoPlot,
  6879.                 V_drawAxes, V_findAxes,  chapter 4.11
  6880.  
  6881.  
  6882.  
  6883.  
  6884.  
  6885. ****************************************************************************
  6886. *                                                                          *
  6887. *******            9. Non-vectorized Functions                       *******
  6888. *                                                                          *
  6889. *****************************************************************************
  6890.  
  6891. There are a few non-vectorized functions, stemming from CMATH and XMATH,
  6892. which are necessary to use VectorLib. They are described here:
  6893.  
  6894. ┌────────────────────────────────────────────────────────────────────────────┐
  6895. │ fcplx                    dcplx                    ecplx                    │
  6896. └────────────────────────────────────────────────────────────────────────────┘
  6897. Function        Initialization of complex numbers
  6898. Syntax          #include <VecLib.h>
  6899.                 fComplex  fcplx( float ReVal, float ImVal );
  6900.                      (similarly dcplx,  ecplx)
  6901. Description     These functions allow to generate complex numbers of the three
  6902.                 complex data types fComplex, dComplex, and eComplex.
  6903.                 CMATH offers overloaded versions of these functions for C++.
  6904.                 See CMATH.TXT for details.
  6905.                 fcplx should be used whenever temporary complex variables
  6906.                 are needed as arguments for functions. In this case, fcplx
  6907.                 replaces the less elegant direct assignment of the real
  6908.                 and imaginary parts.
  6909. Example         z.Re = 3.0;  z.Im = 4.0;
  6910.                 VCF_equC( X, size, z );     /* less convenient */
  6911.                 VCF_equC( Y, size, fcplx( 3.0, 4.0 ));  /* easier */
  6912. Error handling  none
  6913. Return value    the generated complex number
  6914.  
  6915.  
  6916. ┌────────────────────────────────────────────────────────────────────────────┐
  6917. │ isint                    isintl                                            │
  6918. └────────────────────────────────────────────────────────────────────────────┘
  6919. Function        tests if a number is a whole number
  6920. Syntax          #include <xmath.h>
  6921.                 int  isint( double x );
  6922.                 int  isintl( long double x );
  6923. Description     Returns TRUE (a value different from 0), if x is an integer
  6924.                 number. FALSE (a value of 0) is returned, if x contains a non-
  6925.                 zero fractional part.
  6926. Error handling  none
  6927. Return value    see above
  6928.  
  6929.  
  6930. ┌────────────────────────────────────────────────────────────────────────────┐
  6931. │ log2                     log2l                                             │
  6932. └────────────────────────────────────────────────────────────────────────────┘
  6933. Function        Binary logarithm
  6934. Syntax          #include <xmath.h>
  6935.                 double       log2( double x );
  6936.                 long double  log2l( long double x );
  6937. Description     The logarithm of the argument to the basis 2 is calculated and
  6938.                 the result returned.
  6939. Error handling  A DOMAIN error with  NAN ("not-a-number") as return value
  6940.                 results from x < 0 (including -0). A  SING  error with
  6941.                 -HUGE_VAL as return value results from x=0. The handling of
  6942.                 both errors can be modified via _matherr or _matherrl, resp.
  6943. Return value    The binary logarithm of the argument is returned.
  6944. See also        log, logl,  log10, log10l,  VF_log2
  6945.  
  6946.  
  6947. ┌────────────────────────────────────────────────────────────────────────────┐
  6948. │ quadtod                  _quadtold                                         │
  6949. └────────────────────────────────────────────────────────────────────────────┘
  6950. Function        convert a quad into a double or long double.
  6951. Syntax          #include <VecLib.h>
  6952.                 double          quadtod( quad x );
  6953.                 long double   _quadtold( quad x );
  6954. Description     These functions, along with their counterpart, setquad,
  6955.                 provide the necessary interface for the use of the data type
  6956.                 quad within your C/C++ compiler. If, e.g., the value of a quad
  6957.                 (say, of x) has to be printed, this must be done by a
  6958.                 function call like
  6959.                      printf( "% 20.0Lf",  _quadtold( x ));
  6960. Error handling  none
  6961. Return value    the value of x is returned as a double or long double.
  6962.  
  6963.  
  6964. ┌────────────────────────────────────────────────────────────────────────────┐
  6965. │ setquad                                                                    │
  6966. └────────────────────────────────────────────────────────────────────────────┘
  6967. Function        converts a long double into a quad.
  6968. Syntax          #include <VecLib.h>
  6969.                 quad  setquad( long double x );
  6970. Description     This function, along with its counterparts, quadtod and
  6971.                 _quadtold, provides the necessary interface for the use of the
  6972.                 data type quad within your C/C++ compiler. If, e.g.,  quad
  6973.                 parameters are required by a function, they have to be passed
  6974.                 either as existing variables of this data type or as in the
  6975.                 following example:
  6976.                     VQI_addC( QI2, QI1,size, setquad( 53563369.L ));
  6977. Error handling  none
  6978. Return value    the value of x is returned as a quad.
  6979.  
  6980.  
  6981.  
  6982. ****************************************************************************
  6983. *                                                                          *
  6984. *******               10. VectorLib Error Messages                   *******
  6985. *                                                                          *
  6986. ****************************************************************************
  6987.  
  6988.  
  6989. Just as with any C or C++ program, errors occurring within mathematical
  6990. functions lead to the appropriate error messages. See chapter 5 of this
  6991. documentation (in the file HANDBOOK.TXT) and the description of _matherr
  6992. in the Borland C++ documentation for details. Apart from math errors, there
  6993. are some run-time errors specific to VectorLib routines. These errors lead to
  6994. the messages noted below. The name of the function where the error occurred
  6995. is not always exactly the name you wrote in your program. Instead of the
  6996. prefix VI_, the message will read VLI_ or VSI_, depending on the memory model
  6997. used. Similarly, instead of VU_, you will find VUL_ or VUS_, and VFs_FFT or
  6998. VFl_FFT is substituted for VF_FFT, again depending on the memory model.
  6999. The reason for this behavior is that many functions share code and even names.
  7000.  
  7001. ┌────────────────────────────────────────────────────────────────────────────┐
  7002. │ Cannot free non-existent vector.                                           │
  7003. └────────────────────────────────────────────────────────────────────────────┘
  7004. You called V_free or V_nfree for a vector that has no memory allocated.
  7005. Program execution is continued without freeing anything.
  7006.  
  7007. ┌────────────────────────────────────────────────────────────────────────────┐
  7008. │ Cannot scale symbols by more than a factor of 30.                          │
  7009. └────────────────────────────────────────────────────────────────────────────┘
  7010. (Windows only.) The symbols used in VectorLib plotting functions cannot be
  7011. magnified by more than a factor of 30 (which means already filling the screen
  7012. with a single symbol). Program execution is continued with a value of 30.0.
  7013.  
  7014. ┌────────────────────────────────────────────────────────────────────────────┐
  7015. │ Cannot use line thicker than 300 pixels.                                   │
  7016. └────────────────────────────────────────────────────────────────────────────┘
  7017. (Windows only.) The lines used in VectorLib plotting functions cannot be
  7018. thicker than 300 pixels (which is already nonsense). Program execution is
  7019. continued with a value of 300.
  7020.  
  7021. ┌────────────────────────────────────────────────────────────────────────────┐
  7022. │ Cannot use requested format (too many entries per line).                   │
  7023. └────────────────────────────────────────────────────────────────────────────┘
  7024. This error occurs with the printing functions. The parameter nperline was
  7025. chosen too large. The function automatically selects the maximum nperline
  7026. possible and continues execution, but you should nevertheless consider
  7027. adapting your program.
  7028.  
  7029. ┌────────────────────────────────────────────────────────────────────────────┐
  7030. │ Invalid parameter(s).                                                      │
  7031. └────────────────────────────────────────────────────────────────────────────┘
  7032. In some functions, certain combinations of input parameters are illegal. For
  7033. example, it is not possible to perform a 9-point interpolation on only 5
  7034. data points.
  7035.  
  7036. ┌────────────────────────────────────────────────────────────────────────────┐
  7037. │ Not enough memory.                                                         │
  7038. └────────────────────────────────────────────────────────────────────────────┘
  7039. You are trying to allocate memory, but there is not enough left. This error
  7040. occurs mostly in connection with "forgotten" vectors that are allocated but
  7041. never freed. Try these solutions:
  7042. *   Look out for vectors that might be no longer needed and free them as soon
  7043.     as possible. Be sure that any vectors allocated in subroutines are freed
  7044.     before leaving the subroutine.
  7045. *   Are you still working with 16-bit models? If you need to work with large
  7046.     amounts of data, the memory model FLAT should be used, working with Win32,
  7047.     WindowsNT, or Windows95/98.
  7048. *   Store data intermediately on disk, using VF_store, and retrieve them
  7049.     using VF_recall, when needed. This method is slow and should be used only
  7050.     if really necessary.
  7051.  
  7052. ┌────────────────────────────────────────────────────────────────────────────┐
  7053. │ Not possible with fewer than n elements.                                   │
  7054. └────────────────────────────────────────────────────────────────────────────┘
  7055. Some functions require a minimum size of n elements of the vector processed.
  7056.  
  7057. ┌────────────────────────────────────────────────────────────────────────────┐
  7058. │ Not possible with more than n elements.                                    │
  7059. └────────────────────────────────────────────────────────────────────────────┘
  7060. Some functions are limited to a maximum size of n elements. This is true,
  7061. for example, for VF_polyinterpol, where only up to 10 table elements may be
  7062. used for the each interpolation.
  7063.  
  7064. ┌────────────────────────────────────────────────────────────────────────────┐
  7065. │ Size must be an integer power of 2.                                        │
  7066. └────────────────────────────────────────────────────────────────────────────┘
  7067. For all functions using - explicitly or implicitly - Fast Fourier Transform
  7068. methods, the size has to be an integer power of 2. Enlarge or truncate your
  7069. vector(s) to meet that condition.
  7070.  
  7071. ┌────────────────────────────────────────────────────────────────────────────┐
  7072. │ Vector > 64 kB not possible (16-bit).                                      │
  7073. │ Vector > 4 GB not possible (32-bit).                                       │
  7074. └────────────────────────────────────────────────────────────────────────────┘
  7075. *    Either you are trying to allocate a vector whose size exceeds the
  7076.      maximum of 4 GB (32-bit) or 64 kB (16-bit except HUGE). 
  7077. *    Or you are in the HUGE model and attempt to process a huge vector
  7078.      in a function where the size is limited to 64 kB even in this model.
  7079.      This might happen, e.g., if the table is too large in one of the
  7080.      interpolation routines. In this case, you must either use the model FLAT
  7081.      or split up your problem into smaller vectors.
  7082.  
  7083. ┌────────────────────────────────────────────────────────────────────────────┐
  7084. │ Vectors must not be identical.                                             │
  7085. └────────────────────────────────────────────────────────────────────────────┘
  7086. In some functions where more than one input vector is used to calculate more
  7087. than one output vector, attention has to be paid, which output vector may or
  7088. may not overwrite which input vector. See the specification of the function
  7089. where the error occurred.
  7090.  
  7091.  
  7092. ****************************************************************************
  7093. *                                                                          *
  7094. *******                      E  N  D                                 *******
  7095. *                                                                          *
  7096. *****************************************************************************
  7097. ****************************************************************************
  7098.  
  7099. Copyright for OptiVec software and documentation
  7100. (C) 1996-1999 Martin Sander.
  7101. All rights reserved!
  7102.